<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><link rel="stylesheet" type="text/css" href="style.css" /><script type="text/javascript" src="highlight.js"></script></head><body><pre><span class="hs-pragma">{-# LANGUAGE CPP #-}</span><span>
</span><span id="line-2"></span><span>
</span><span id="line-3"></span><span class="hs-comment">-----------------------------------------------------------------------------</span><span>
</span><span id="line-4"></span><span class="hs-comment">--</span><span>
</span><span id="line-5"></span><span class="hs-comment">-- Generating machine code (instruction selection)</span><span>
</span><span id="line-6"></span><span class="hs-comment">--</span><span>
</span><span id="line-7"></span><span class="hs-comment">-- (c) The University of Glasgow 1996-2013</span><span>
</span><span id="line-8"></span><span class="hs-comment">--</span><span>
</span><span id="line-9"></span><span class="hs-comment">-----------------------------------------------------------------------------</span><span>
</span><span id="line-10"></span><span>
</span><span id="line-11"></span><span class="hs-pragma">{-# LANGUAGE GADTs #-}</span><span>
</span><span id="line-12"></span><span class="hs-keyword">module</span><span> </span><span class="hs-identifier">GHC.CmmToAsm.SPARC.CodeGen</span><span> </span><span class="hs-special">(</span><span>
</span><span id="line-13"></span><span>        </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.html#cmmTopCodeGen"><span class="hs-identifier">cmmTopCodeGen</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-14"></span><span>        </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.html#generateJumpTableForInstr"><span class="hs-identifier">generateJumpTableForInstr</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-15"></span><span>        </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#InstrBlock"><span class="hs-identifier">InstrBlock</span></a></span><span>
</span><span id="line-16"></span><span class="hs-special">)</span><span>
</span><span id="line-17"></span><span>
</span><span id="line-18"></span><span class="hs-keyword">where</span><span class="hs-cpp">

#include &quot;HsVersions.h&quot;
</span><span>
</span><span id="line-22"></span><span class="hs-comment">-- NCG stuff:</span><span>
</span><span id="line-23"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Prelude.html"><span class="hs-identifier">GHC.Prelude</span></a></span><span>
</span><span id="line-24"></span><span>
</span><span id="line-25"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.Base.html"><span class="hs-identifier">GHC.CmmToAsm.SPARC.Base</span></a></span><span>
</span><span id="line-26"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Sanity.html"><span class="hs-identifier">GHC.CmmToAsm.SPARC.CodeGen.Sanity</span></a></span><span>
</span><span id="line-27"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Amode.html"><span class="hs-identifier">GHC.CmmToAsm.SPARC.CodeGen.Amode</span></a></span><span>
</span><span id="line-28"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.CondCode.html"><span class="hs-identifier">GHC.CmmToAsm.SPARC.CodeGen.CondCode</span></a></span><span>
</span><span id="line-29"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen64.html"><span class="hs-identifier">GHC.CmmToAsm.SPARC.CodeGen.Gen64</span></a></span><span>
</span><span id="line-30"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html"><span class="hs-identifier">GHC.CmmToAsm.SPARC.CodeGen.Gen32</span></a></span><span>
</span><span id="line-31"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html"><span class="hs-identifier">GHC.CmmToAsm.SPARC.CodeGen.Base</span></a></span><span>
</span><span id="line-32"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.Instr.html"><span class="hs-identifier">GHC.CmmToAsm.SPARC.Instr</span></a></span><span>
</span><span id="line-33"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.Imm.html"><span class="hs-identifier">GHC.CmmToAsm.SPARC.Imm</span></a></span><span>
</span><span id="line-34"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.AddrMode.html"><span class="hs-identifier">GHC.CmmToAsm.SPARC.AddrMode</span></a></span><span>
</span><span id="line-35"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.Regs.html"><span class="hs-identifier">GHC.CmmToAsm.SPARC.Regs</span></a></span><span>
</span><span id="line-36"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.Stack.html"><span class="hs-identifier">GHC.CmmToAsm.SPARC.Stack</span></a></span><span>
</span><span id="line-37"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.Instr.html"><span class="hs-identifier">GHC.CmmToAsm.Instr</span></a></span><span>
</span><span id="line-38"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.Format.html"><span class="hs-identifier">GHC.CmmToAsm.Format</span></a></span><span>
</span><span id="line-39"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.Monad.html"><span class="hs-identifier">GHC.CmmToAsm.Monad</span></a></span><span>   </span><span class="hs-special">(</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.Monad.html#NatM"><span class="hs-identifier">NatM</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.Monad.html#getNewRegNat"><span class="hs-identifier">getNewRegNat</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.Monad.html#getNewLabelNat"><span class="hs-identifier">getNewLabelNat</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.Monad.html#getPlatform"><span class="hs-identifier">getPlatform</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.Monad.html#getConfig"><span class="hs-identifier">getConfig</span></a></span><span> </span><span class="hs-special">)</span><span>
</span><span id="line-40"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.Config.html"><span class="hs-identifier">GHC.CmmToAsm.Config</span></a></span><span>
</span><span id="line-41"></span><span>
</span><span id="line-42"></span><span class="hs-comment">-- Our intermediate code:</span><span>
</span><span id="line-43"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Cmm.BlockId.html"><span class="hs-identifier">GHC.Cmm.BlockId</span></a></span><span>
</span><span id="line-44"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Cmm.html"><span class="hs-identifier">GHC.Cmm</span></a></span><span>
</span><span id="line-45"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Cmm.Utils.html"><span class="hs-identifier">GHC.Cmm.Utils</span></a></span><span>
</span><span id="line-46"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Cmm.Switch.html"><span class="hs-identifier">GHC.Cmm.Switch</span></a></span><span>
</span><span id="line-47"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Cmm.Dataflow.Block.html"><span class="hs-identifier">GHC.Cmm.Dataflow.Block</span></a></span><span>
</span><span id="line-48"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Cmm.Dataflow.Graph.html"><span class="hs-identifier">GHC.Cmm.Dataflow.Graph</span></a></span><span>
</span><span id="line-49"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.PIC.html"><span class="hs-identifier">GHC.CmmToAsm.PIC</span></a></span><span>
</span><span id="line-50"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Platform.Reg.html"><span class="hs-identifier">GHC.Platform.Reg</span></a></span><span>
</span><span id="line-51"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Cmm.CLabel.html"><span class="hs-identifier">GHC.Cmm.CLabel</span></a></span><span>
</span><span id="line-52"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.CPrim.html"><span class="hs-identifier">GHC.CmmToAsm.CPrim</span></a></span><span>
</span><span id="line-53"></span><span>
</span><span id="line-54"></span><span class="hs-comment">-- The rest:</span><span>
</span><span id="line-55"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Types.Basic.html"><span class="hs-identifier">GHC.Types.Basic</span></a></span><span>
</span><span id="line-56"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Data.FastString.html"><span class="hs-identifier">GHC.Data.FastString</span></a></span><span>
</span><span id="line-57"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Data.OrdList.html"><span class="hs-identifier">GHC.Data.OrdList</span></a></span><span>
</span><span id="line-58"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Utils.Outputable.html"><span class="hs-identifier">GHC.Utils.Outputable</span></a></span><span>
</span><span id="line-59"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="../../ghc-boot/src/GHC.Platform.html#"><span class="hs-identifier">GHC.Platform</span></a></span><span>
</span><span id="line-60"></span><span>
</span><span id="line-61"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="../../base/src/Control.Monad.html#"><span class="hs-identifier">Control.Monad</span></a></span><span>    </span><span class="hs-special">(</span><span> </span><span class="annot"><a href="../../base/src/Control.Monad.html#mapAndUnzipM"><span class="hs-identifier">mapAndUnzipM</span></a></span><span> </span><span class="hs-special">)</span><span>
</span><span id="line-62"></span><span>
</span><span id="line-63"></span><span class="hs-comment">-- | Top level code generation</span><span>
</span><span id="line-64"></span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.html#cmmTopCodeGen"><span class="hs-identifier hs-type">cmmTopCodeGen</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Cmm.html#RawCmmDecl"><span class="hs-identifier hs-type">RawCmmDecl</span></a></span><span>
</span><span id="line-65"></span><span>              </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.Monad.html#NatM"><span class="hs-identifier hs-type">NatM</span></a></span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.CmmToAsm.Instr.html#NatCmmDecl"><span class="hs-identifier hs-type">NatCmmDecl</span></a></span><span> </span><span class="annot"><a href="GHC.Cmm.html#RawCmmStatics"><span class="hs-identifier hs-type">RawCmmStatics</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.Instr.html#Instr"><span class="hs-identifier hs-type">Instr</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-66"></span><span>
</span><span id="line-67"></span><span id="cmmTopCodeGen"><span class="annot"><span class="annottext">cmmTopCodeGen :: RawCmmDecl -&gt; NatM [NatCmmDecl RawCmmStatics Instr]
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.html#cmmTopCodeGen"><span class="hs-identifier hs-var hs-var">cmmTopCodeGen</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.html#CmmProc"><span class="hs-identifier hs-type">CmmProc</span></a></span><span> </span><span id="local-6989586621681038821"><span class="annot"><span class="annottext">LabelMap RawCmmStatics
</span><a href="#local-6989586621681038821"><span class="hs-identifier hs-var">info</span></a></span></span><span> </span><span id="local-6989586621681038820"><span class="annot"><span class="annottext">CLabel
</span><a href="#local-6989586621681038820"><span class="hs-identifier hs-var">lab</span></a></span></span><span> </span><span id="local-6989586621681038819"><span class="annot"><span class="annottext">[GlobalReg]
</span><a href="#local-6989586621681038819"><span class="hs-identifier hs-var">live</span></a></span></span><span> </span><span id="local-6989586621681038818"><span class="annot"><span class="annottext">CmmGraph
</span><a href="#local-6989586621681038818"><span class="hs-identifier hs-var">graph</span></a></span></span><span class="hs-special">)</span><span>
</span><span id="line-68"></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span> </span><span class="hs-keyword">let</span><span> </span><span id="local-6989586621681038817"><span class="annot"><span class="annottext">blocks :: [CmmBlock]
</span><a href="#local-6989586621681038817"><span class="hs-identifier hs-var hs-var">blocks</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">CmmGraph -&gt; [CmmBlock]
</span><a href="GHC.Cmm.Utils.html#toBlockListEntryFirst"><span class="hs-identifier hs-var">toBlockListEntryFirst</span></a></span><span> </span><span class="annot"><span class="annottext">CmmGraph
</span><a href="#local-6989586621681038818"><span class="hs-identifier hs-var">graph</span></a></span><span>
</span><span id="line-69"></span><span>      </span><span class="hs-special">(</span><span id="local-6989586621681038815"><span class="annot"><span class="annottext">[[NatBasicBlock Instr]]
</span><a href="#local-6989586621681038815"><span class="hs-identifier hs-var">nat_blocks</span></a></span></span><span class="hs-special">,</span><span id="local-6989586621681038814"><span class="annot"><span class="annottext">[[NatCmmDecl RawCmmStatics Instr]]
</span><a href="#local-6989586621681038814"><span class="hs-identifier hs-var">statics</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">(CmmBlock
 -&gt; NatM ([NatBasicBlock Instr], [NatCmmDecl RawCmmStatics Instr]))
-&gt; [CmmBlock]
-&gt; NatM
     ([[NatBasicBlock Instr]], [[NatCmmDecl RawCmmStatics Instr]])
forall (m :: * -&gt; *) a b c.
Applicative m =&gt;
(a -&gt; m (b, c)) -&gt; [a] -&gt; m ([b], [c])
</span><a href="../../base/src/Control.Monad.html#mapAndUnzipM"><span class="hs-identifier hs-var">mapAndUnzipM</span></a></span><span> </span><span class="annot"><span class="annottext">CmmBlock
-&gt; NatM ([NatBasicBlock Instr], [NatCmmDecl RawCmmStatics Instr])
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.html#basicBlockCodeGen"><span class="hs-identifier hs-var">basicBlockCodeGen</span></a></span><span> </span><span class="annot"><span class="annottext">[CmmBlock]
</span><a href="#local-6989586621681038817"><span class="hs-identifier hs-var">blocks</span></a></span><span>
</span><span id="line-70"></span><span>
</span><span id="line-71"></span><span>      </span><span class="hs-keyword">let</span><span> </span><span id="local-6989586621681038812"><span class="annot"><span class="annottext">proc :: NatCmmDecl RawCmmStatics Instr
</span><a href="#local-6989586621681038812"><span class="hs-identifier hs-var hs-var">proc</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">LabelMap RawCmmStatics
-&gt; CLabel
-&gt; [GlobalReg]
-&gt; ListGraph Instr
-&gt; NatCmmDecl RawCmmStatics Instr
forall d h g. h -&gt; CLabel -&gt; [GlobalReg] -&gt; g -&gt; GenCmmDecl d h g
</span><a href="GHC.Cmm.html#CmmProc"><span class="hs-identifier hs-var">CmmProc</span></a></span><span> </span><span class="annot"><span class="annottext">LabelMap RawCmmStatics
</span><a href="#local-6989586621681038821"><span class="hs-identifier hs-var">info</span></a></span><span> </span><span class="annot"><span class="annottext">CLabel
</span><a href="#local-6989586621681038820"><span class="hs-identifier hs-var">lab</span></a></span><span> </span><span class="annot"><span class="annottext">[GlobalReg]
</span><a href="#local-6989586621681038819"><span class="hs-identifier hs-var">live</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">[NatBasicBlock Instr] -&gt; ListGraph Instr
forall i. [GenBasicBlock i] -&gt; ListGraph i
</span><a href="GHC.Cmm.html#ListGraph"><span class="hs-identifier hs-var">ListGraph</span></a></span><span> </span><span class="annot"><span class="annottext">([NatBasicBlock Instr] -&gt; ListGraph Instr)
-&gt; [NatBasicBlock Instr] -&gt; ListGraph Instr
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">[[NatBasicBlock Instr]] -&gt; [NatBasicBlock Instr]
forall (t :: * -&gt; *) a. Foldable t =&gt; t [a] -&gt; [a]
</span><a href="../../base/src/Data.Foldable.html#concat"><span class="hs-identifier hs-var">concat</span></a></span><span> </span><span class="annot"><span class="annottext">[[NatBasicBlock Instr]]
</span><a href="#local-6989586621681038815"><span class="hs-identifier hs-var">nat_blocks</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-72"></span><span>      </span><span class="hs-keyword">let</span><span> </span><span id="local-6989586621681038809"><span class="annot"><span class="annottext">tops :: [NatCmmDecl RawCmmStatics Instr]
</span><a href="#local-6989586621681038809"><span class="hs-identifier hs-var hs-var">tops</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">NatCmmDecl RawCmmStatics Instr
</span><a href="#local-6989586621681038812"><span class="hs-identifier hs-var">proc</span></a></span><span> </span><span class="annot"><span class="annottext">NatCmmDecl RawCmmStatics Instr
-&gt; [NatCmmDecl RawCmmStatics Instr]
-&gt; [NatCmmDecl RawCmmStatics Instr]
forall a. a -&gt; [a] -&gt; [a]
</span><span class="hs-glyph hs-var">:</span></span><span> </span><span class="annot"><span class="annottext">[[NatCmmDecl RawCmmStatics Instr]]
-&gt; [NatCmmDecl RawCmmStatics Instr]
forall (t :: * -&gt; *) a. Foldable t =&gt; t [a] -&gt; [a]
</span><a href="../../base/src/Data.Foldable.html#concat"><span class="hs-identifier hs-var">concat</span></a></span><span> </span><span class="annot"><span class="annottext">[[NatCmmDecl RawCmmStatics Instr]]
</span><a href="#local-6989586621681038814"><span class="hs-identifier hs-var">statics</span></a></span><span>
</span><span id="line-73"></span><span>
</span><span id="line-74"></span><span>      </span><span class="annot"><span class="annottext">[NatCmmDecl RawCmmStatics Instr]
-&gt; NatM [NatCmmDecl RawCmmStatics Instr]
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="annot"><span class="annottext">[NatCmmDecl RawCmmStatics Instr]
</span><a href="#local-6989586621681038809"><span class="hs-identifier hs-var">tops</span></a></span><span>
</span><span id="line-75"></span><span>
</span><span id="line-76"></span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.html#cmmTopCodeGen"><span class="hs-identifier hs-var">cmmTopCodeGen</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.html#CmmData"><span class="hs-identifier hs-type">CmmData</span></a></span><span> </span><span id="local-6989586621681038807"><span class="annot"><span class="annottext">Section
</span><a href="#local-6989586621681038807"><span class="hs-identifier hs-var">sec</span></a></span></span><span> </span><span id="local-6989586621681038806"><span class="annot"><span class="annottext">RawCmmStatics
</span><a href="#local-6989586621681038806"><span class="hs-identifier hs-var">dat</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-77"></span><span>  </span><span class="annot"><span class="annottext">[NatCmmDecl RawCmmStatics Instr]
-&gt; NatM [NatCmmDecl RawCmmStatics Instr]
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">Section -&gt; RawCmmStatics -&gt; NatCmmDecl RawCmmStatics Instr
forall d h g. Section -&gt; d -&gt; GenCmmDecl d h g
</span><a href="GHC.Cmm.html#CmmData"><span class="hs-identifier hs-var">CmmData</span></a></span><span> </span><span class="annot"><span class="annottext">Section
</span><a href="#local-6989586621681038807"><span class="hs-identifier hs-var">sec</span></a></span><span> </span><span class="annot"><span class="annottext">RawCmmStatics
</span><a href="#local-6989586621681038806"><span class="hs-identifier hs-var">dat</span></a></span><span class="hs-special">]</span><span>  </span><span class="hs-comment">-- no translation, we just use CmmStatic</span><span>
</span><span id="line-78"></span><span>
</span><span id="line-79"></span><span>
</span><span id="line-80"></span><span class="hs-comment">-- | Do code generation on a single block of CMM code.</span><span>
</span><span id="line-81"></span><span class="hs-comment">--      code generation may introduce new basic block boundaries, which</span><span>
</span><span id="line-82"></span><span class="hs-comment">--      are indicated by the NEWBLOCK instruction.  We must split up the</span><span>
</span><span id="line-83"></span><span class="hs-comment">--      instruction stream into basic blocks again.  Also, we extract</span><span>
</span><span id="line-84"></span><span class="hs-comment">--      LDATAs here too.</span><span>
</span><span id="line-85"></span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.html#basicBlockCodeGen"><span class="hs-identifier hs-type">basicBlockCodeGen</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Cmm.html#CmmBlock"><span class="hs-identifier hs-type">CmmBlock</span></a></span><span>
</span><span id="line-86"></span><span>                  </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.Monad.html#NatM"><span class="hs-identifier hs-type">NatM</span></a></span><span> </span><span class="hs-special">(</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.CmmToAsm.Instr.html#NatBasicBlock"><span class="hs-identifier hs-type">NatBasicBlock</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.Instr.html#Instr"><span class="hs-identifier hs-type">Instr</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-87"></span><span>                          </span><span class="hs-special">,</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.CmmToAsm.Instr.html#NatCmmDecl"><span class="hs-identifier hs-type">NatCmmDecl</span></a></span><span> </span><span class="annot"><a href="GHC.Cmm.html#RawCmmStatics"><span class="hs-identifier hs-type">RawCmmStatics</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.Instr.html#Instr"><span class="hs-identifier hs-type">Instr</span></a></span><span class="hs-special">]</span><span class="hs-special">)</span><span>
</span><span id="line-88"></span><span>
</span><span id="line-89"></span><span id="basicBlockCodeGen"><span class="annot"><span class="annottext">basicBlockCodeGen :: CmmBlock
-&gt; NatM ([NatBasicBlock Instr], [NatCmmDecl RawCmmStatics Instr])
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.html#basicBlockCodeGen"><span class="hs-identifier hs-var hs-var">basicBlockCodeGen</span></a></span></span><span> </span><span id="local-6989586621681038805"><span class="annot"><span class="annottext">CmmBlock
</span><a href="#local-6989586621681038805"><span class="hs-identifier hs-var">block</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-90"></span><span>  </span><span class="hs-keyword">let</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">CmmNode C O
</span><span class="hs-identifier">_</span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681038804"><span class="annot"><span class="annottext">Block CmmNode O O
</span><a href="#local-6989586621681038804"><span class="hs-identifier hs-var">nodes</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681038803"><span class="annot"><span class="annottext">CmmNode O C
</span><a href="#local-6989586621681038803"><span class="hs-identifier hs-var">tail</span></a></span></span><span class="hs-special">)</span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">CmmBlock -&gt; (CmmNode C O, Block CmmNode O O, CmmNode O C)
forall (n :: Extensibility -&gt; Extensibility -&gt; *).
Block n C C -&gt; (n C O, Block n O O, n O C)
</span><a href="GHC.Cmm.Dataflow.Block.html#blockSplit"><span class="hs-identifier hs-var">blockSplit</span></a></span><span> </span><span class="annot"><span class="annottext">CmmBlock
</span><a href="#local-6989586621681038805"><span class="hs-identifier hs-var">block</span></a></span><span>
</span><span id="line-91"></span><span>      </span><span id="local-6989586621681038801"><span class="annot"><span class="annottext">id :: Label
</span><a href="#local-6989586621681038801"><span class="hs-identifier hs-var hs-var">id</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">CmmBlock -&gt; Label
forall (thing :: Extensibility -&gt; Extensibility -&gt; *)
       (x :: Extensibility).
NonLocal thing =&gt;
thing C x -&gt; Label
</span><a href="GHC.Cmm.Dataflow.Graph.html#entryLabel"><span class="hs-identifier hs-var">entryLabel</span></a></span><span> </span><span class="annot"><span class="annottext">CmmBlock
</span><a href="#local-6989586621681038805"><span class="hs-identifier hs-var">block</span></a></span><span>
</span><span id="line-92"></span><span>      </span><span id="local-6989586621681038799"><span class="annot"><span class="annottext">stmts :: [CmmNode O O]
</span><a href="#local-6989586621681038799"><span class="hs-identifier hs-var hs-var">stmts</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Block CmmNode O O -&gt; [CmmNode O O]
forall (n :: Extensibility -&gt; Extensibility -&gt; *).
Block n O O -&gt; [n O O]
</span><a href="GHC.Cmm.Dataflow.Block.html#blockToList"><span class="hs-identifier hs-var">blockToList</span></a></span><span> </span><span class="annot"><span class="annottext">Block CmmNode O O
</span><a href="#local-6989586621681038804"><span class="hs-identifier hs-var">nodes</span></a></span><span>
</span><span id="line-93"></span><span>  </span><span id="local-6989586621681038797"><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681038797"><span class="hs-identifier hs-var">mid_instrs</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">[CmmNode O O] -&gt; NatM InstrBlock
forall (e :: Extensibility) (x :: Extensibility).
[CmmNode e x] -&gt; NatM InstrBlock
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.html#stmtsToInstrs"><span class="hs-identifier hs-var">stmtsToInstrs</span></a></span><span> </span><span class="annot"><span class="annottext">[CmmNode O O]
</span><a href="#local-6989586621681038799"><span class="hs-identifier hs-var">stmts</span></a></span><span>
</span><span id="line-94"></span><span>  </span><span id="local-6989586621681038795"><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681038795"><span class="hs-identifier hs-var">tail_instrs</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">CmmNode O C -&gt; NatM InstrBlock
forall (e :: Extensibility) (x :: Extensibility).
CmmNode e x -&gt; NatM InstrBlock
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.html#stmtToInstrs"><span class="hs-identifier hs-var">stmtToInstrs</span></a></span><span> </span><span class="annot"><span class="annottext">CmmNode O C
</span><a href="#local-6989586621681038803"><span class="hs-identifier hs-var">tail</span></a></span><span>
</span><span id="line-95"></span><span>  </span><span class="hs-keyword">let</span><span> </span><span id="local-6989586621681038793"><span class="annot"><span class="annottext">instrs :: InstrBlock
</span><a href="#local-6989586621681038793"><span class="hs-identifier hs-var hs-var">instrs</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681038797"><span class="hs-identifier hs-var">mid_instrs</span></a></span><span> </span><span class="annot"><span class="annottext">InstrBlock -&gt; InstrBlock -&gt; InstrBlock
forall a. OrdList a -&gt; OrdList a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#appOL"><span class="hs-operator hs-var">`appOL`</span></a></span><span> </span><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681038795"><span class="hs-identifier hs-var">tail_instrs</span></a></span><span>
</span><span id="line-96"></span><span>  </span><span class="hs-keyword">let</span><span>
</span><span id="line-97"></span><span>        </span><span class="hs-special">(</span><span id="local-6989586621681038791"><span class="annot"><span class="annottext">[Instr]
</span><a href="#local-6989586621681038791"><span class="hs-identifier hs-var">top</span></a></span></span><span class="hs-special">,</span><span id="local-6989586621681038790"><span class="annot"><span class="annottext">[NatBasicBlock Instr]
</span><a href="#local-6989586621681038790"><span class="hs-identifier hs-var">other_blocks</span></a></span></span><span class="hs-special">,</span><span id="local-6989586621681038789"><span class="annot"><span class="annottext">[NatCmmDecl RawCmmStatics Instr]
</span><a href="#local-6989586621681038789"><span class="hs-identifier hs-var">statics</span></a></span></span><span class="hs-special">)</span><span>
</span><span id="line-98"></span><span>                </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">(Instr
 -&gt; ([Instr], [NatBasicBlock Instr],
     [NatCmmDecl RawCmmStatics Instr])
 -&gt; ([Instr], [NatBasicBlock Instr],
     [NatCmmDecl RawCmmStatics Instr]))
-&gt; ([Instr], [NatBasicBlock Instr],
    [NatCmmDecl RawCmmStatics Instr])
-&gt; InstrBlock
-&gt; ([Instr], [NatBasicBlock Instr],
    [NatCmmDecl RawCmmStatics Instr])
forall a b. (a -&gt; b -&gt; b) -&gt; b -&gt; OrdList a -&gt; b
</span><a href="GHC.Data.OrdList.html#foldrOL"><span class="hs-identifier hs-var">foldrOL</span></a></span><span> </span><span class="annot"><span class="annottext">Instr
-&gt; ([Instr], [NatBasicBlock Instr],
    [NatCmmDecl RawCmmStatics Instr])
-&gt; ([Instr], [NatBasicBlock Instr],
    [NatCmmDecl RawCmmStatics Instr])
forall {h} {g}.
Instr
-&gt; ([Instr], [NatBasicBlock Instr], [GenCmmDecl RawCmmStatics h g])
-&gt; ([Instr], [NatBasicBlock Instr], [GenCmmDecl RawCmmStatics h g])
</span><a href="#local-6989586621681038787"><span class="hs-identifier hs-var">mkBlocks</span></a></span><span> </span><span class="hs-special">(</span><span class="hs-special">[</span><span class="hs-special">]</span><span class="hs-special">,</span><span class="hs-special">[</span><span class="hs-special">]</span><span class="hs-special">,</span><span class="hs-special">[</span><span class="hs-special">]</span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681038793"><span class="hs-identifier hs-var">instrs</span></a></span><span>
</span><span id="line-99"></span><span>
</span><span id="line-100"></span><span>        </span><span id="local-6989586621681038787"><span class="annot"><span class="annottext">mkBlocks :: Instr
-&gt; ([Instr], [NatBasicBlock Instr], [GenCmmDecl RawCmmStatics h g])
-&gt; ([Instr], [NatBasicBlock Instr], [GenCmmDecl RawCmmStatics h g])
</span><a href="#local-6989586621681038787"><span class="hs-identifier hs-var hs-var">mkBlocks</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.CmmToAsm.SPARC.Instr.html#NEWBLOCK"><span class="hs-identifier hs-type">NEWBLOCK</span></a></span><span> </span><span id="local-6989586621681038785"><span class="annot"><span class="annottext">Label
</span><a href="#local-6989586621681038785"><span class="hs-identifier hs-var">id</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span id="local-6989586621681038784"><span class="annot"><span class="annottext">[Instr]
</span><a href="#local-6989586621681038784"><span class="hs-identifier hs-var">instrs</span></a></span></span><span class="hs-special">,</span><span id="local-6989586621681038783"><span class="annot"><span class="annottext">[NatBasicBlock Instr]
</span><a href="#local-6989586621681038783"><span class="hs-identifier hs-var">blocks</span></a></span></span><span class="hs-special">,</span><span id="local-6989586621681038782"><span class="annot"><span class="annottext">[GenCmmDecl RawCmmStatics h g]
</span><a href="#local-6989586621681038782"><span class="hs-identifier hs-var">statics</span></a></span></span><span class="hs-special">)</span><span>
</span><span id="line-101"></span><span>          </span><span class="hs-glyph">=</span><span> </span><span class="hs-special">(</span><span class="hs-special">[</span><span class="hs-special">]</span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Label -&gt; [Instr] -&gt; NatBasicBlock Instr
forall i. Label -&gt; [i] -&gt; GenBasicBlock i
</span><a href="GHC.Cmm.html#BasicBlock"><span class="hs-identifier hs-var">BasicBlock</span></a></span><span> </span><span class="annot"><span class="annottext">Label
</span><a href="#local-6989586621681038785"><span class="hs-identifier hs-var">id</span></a></span><span> </span><span class="annot"><span class="annottext">[Instr]
</span><a href="#local-6989586621681038784"><span class="hs-identifier hs-var">instrs</span></a></span><span> </span><span class="annot"><span class="annottext">NatBasicBlock Instr
-&gt; [NatBasicBlock Instr] -&gt; [NatBasicBlock Instr]
forall a. a -&gt; [a] -&gt; [a]
</span><span class="hs-glyph hs-var">:</span></span><span> </span><span class="annot"><span class="annottext">[NatBasicBlock Instr]
</span><a href="#local-6989586621681038783"><span class="hs-identifier hs-var">blocks</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">[GenCmmDecl RawCmmStatics h g]
</span><a href="#local-6989586621681038782"><span class="hs-identifier hs-var">statics</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-102"></span><span>
</span><span id="line-103"></span><span>        </span><span class="annot"><a href="#local-6989586621681038787"><span class="hs-identifier hs-var">mkBlocks</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.CmmToAsm.SPARC.Instr.html#LDATA"><span class="hs-identifier hs-type">LDATA</span></a></span><span> </span><span id="local-6989586621681038779"><span class="annot"><span class="annottext">Section
</span><a href="#local-6989586621681038779"><span class="hs-identifier hs-var">sec</span></a></span></span><span> </span><span id="local-6989586621681038778"><span class="annot"><span class="annottext">RawCmmStatics
</span><a href="#local-6989586621681038778"><span class="hs-identifier hs-var">dat</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span id="local-6989586621681038777"><span class="annot"><span class="annottext">[Instr]
</span><a href="#local-6989586621681038777"><span class="hs-identifier hs-var">instrs</span></a></span></span><span class="hs-special">,</span><span id="local-6989586621681038776"><span class="annot"><span class="annottext">[NatBasicBlock Instr]
</span><a href="#local-6989586621681038776"><span class="hs-identifier hs-var">blocks</span></a></span></span><span class="hs-special">,</span><span id="local-6989586621681038775"><span class="annot"><span class="annottext">[GenCmmDecl RawCmmStatics h g]
</span><a href="#local-6989586621681038775"><span class="hs-identifier hs-var">statics</span></a></span></span><span class="hs-special">)</span><span>
</span><span id="line-104"></span><span>          </span><span class="hs-glyph">=</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">[Instr]
</span><a href="#local-6989586621681038777"><span class="hs-identifier hs-var">instrs</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">[NatBasicBlock Instr]
</span><a href="#local-6989586621681038776"><span class="hs-identifier hs-var">blocks</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Section -&gt; RawCmmStatics -&gt; GenCmmDecl RawCmmStatics h g
forall d h g. Section -&gt; d -&gt; GenCmmDecl d h g
</span><a href="GHC.Cmm.html#CmmData"><span class="hs-identifier hs-var">CmmData</span></a></span><span> </span><span class="annot"><span class="annottext">Section
</span><a href="#local-6989586621681038779"><span class="hs-identifier hs-var">sec</span></a></span><span> </span><span class="annot"><span class="annottext">RawCmmStatics
</span><a href="#local-6989586621681038778"><span class="hs-identifier hs-var">dat</span></a></span><span class="annot"><span class="annottext">GenCmmDecl RawCmmStatics h g
-&gt; [GenCmmDecl RawCmmStatics h g] -&gt; [GenCmmDecl RawCmmStatics h g]
forall a. a -&gt; [a] -&gt; [a]
</span><span class="hs-glyph hs-var">:</span></span><span class="annot"><span class="annottext">[GenCmmDecl RawCmmStatics h g]
</span><a href="#local-6989586621681038775"><span class="hs-identifier hs-var">statics</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-105"></span><span>
</span><span id="line-106"></span><span>        </span><span class="annot"><a href="#local-6989586621681038787"><span class="hs-identifier hs-var">mkBlocks</span></a></span><span> </span><span id="local-6989586621681038774"><span class="annot"><span class="annottext">Instr
</span><a href="#local-6989586621681038774"><span class="hs-identifier hs-var">instr</span></a></span></span><span> </span><span class="hs-special">(</span><span id="local-6989586621681038773"><span class="annot"><span class="annottext">[Instr]
</span><a href="#local-6989586621681038773"><span class="hs-identifier hs-var">instrs</span></a></span></span><span class="hs-special">,</span><span id="local-6989586621681038772"><span class="annot"><span class="annottext">[NatBasicBlock Instr]
</span><a href="#local-6989586621681038772"><span class="hs-identifier hs-var">blocks</span></a></span></span><span class="hs-special">,</span><span id="local-6989586621681038771"><span class="annot"><span class="annottext">[GenCmmDecl RawCmmStatics h g]
</span><a href="#local-6989586621681038771"><span class="hs-identifier hs-var">statics</span></a></span></span><span class="hs-special">)</span><span>
</span><span id="line-107"></span><span>          </span><span class="hs-glyph">=</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Instr
</span><a href="#local-6989586621681038774"><span class="hs-identifier hs-var">instr</span></a></span><span class="annot"><span class="annottext">Instr -&gt; [Instr] -&gt; [Instr]
forall a. a -&gt; [a] -&gt; [a]
</span><span class="hs-glyph hs-var">:</span></span><span class="annot"><span class="annottext">[Instr]
</span><a href="#local-6989586621681038773"><span class="hs-identifier hs-var">instrs</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">[NatBasicBlock Instr]
</span><a href="#local-6989586621681038772"><span class="hs-identifier hs-var">blocks</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">[GenCmmDecl RawCmmStatics h g]
</span><a href="#local-6989586621681038771"><span class="hs-identifier hs-var">statics</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-108"></span><span>
</span><span id="line-109"></span><span>        </span><span class="hs-comment">-- do intra-block sanity checking</span><span>
</span><span id="line-110"></span><span>        </span><span id="local-6989586621681038770"><span class="annot"><span class="annottext">blocksChecked :: [NatBasicBlock Instr]
</span><a href="#local-6989586621681038770"><span class="hs-identifier hs-var hs-var">blocksChecked</span></a></span></span><span>
</span><span id="line-111"></span><span>                </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">(NatBasicBlock Instr -&gt; NatBasicBlock Instr)
-&gt; [NatBasicBlock Instr] -&gt; [NatBasicBlock Instr]
forall a b. (a -&gt; b) -&gt; [a] -&gt; [b]
</span><a href="../../base/src/GHC.Base.html#map"><span class="hs-identifier hs-var">map</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">CmmBlock -&gt; NatBasicBlock Instr -&gt; NatBasicBlock Instr
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Sanity.html#checkBlock"><span class="hs-identifier hs-var">checkBlock</span></a></span><span> </span><span class="annot"><span class="annottext">CmmBlock
</span><a href="#local-6989586621681038805"><span class="hs-identifier hs-var">block</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-112"></span><span>                </span><span class="annot"><span class="annottext">([NatBasicBlock Instr] -&gt; [NatBasicBlock Instr])
-&gt; [NatBasicBlock Instr] -&gt; [NatBasicBlock Instr]
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">Label -&gt; [Instr] -&gt; NatBasicBlock Instr
forall i. Label -&gt; [i] -&gt; GenBasicBlock i
</span><a href="GHC.Cmm.html#BasicBlock"><span class="hs-identifier hs-var">BasicBlock</span></a></span><span> </span><span class="annot"><span class="annottext">Label
</span><a href="#local-6989586621681038801"><span class="hs-identifier hs-var">id</span></a></span><span> </span><span class="annot"><span class="annottext">[Instr]
</span><a href="#local-6989586621681038791"><span class="hs-identifier hs-var">top</span></a></span><span> </span><span class="annot"><span class="annottext">NatBasicBlock Instr
-&gt; [NatBasicBlock Instr] -&gt; [NatBasicBlock Instr]
forall a. a -&gt; [a] -&gt; [a]
</span><span class="hs-glyph hs-var">:</span></span><span> </span><span class="annot"><span class="annottext">[NatBasicBlock Instr]
</span><a href="#local-6989586621681038790"><span class="hs-identifier hs-var">other_blocks</span></a></span><span>
</span><span id="line-113"></span><span>
</span><span id="line-114"></span><span>  </span><span class="annot"><span class="annottext">([NatBasicBlock Instr], [NatCmmDecl RawCmmStatics Instr])
-&gt; NatM ([NatBasicBlock Instr], [NatCmmDecl RawCmmStatics Instr])
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">[NatBasicBlock Instr]
</span><a href="#local-6989586621681038770"><span class="hs-identifier hs-var">blocksChecked</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">[NatCmmDecl RawCmmStatics Instr]
</span><a href="#local-6989586621681038789"><span class="hs-identifier hs-var">statics</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-115"></span><span>
</span><span id="line-116"></span><span>
</span><span id="line-117"></span><span class="hs-comment">-- | Convert some Cmm statements to SPARC instructions.</span><span>
</span><span id="line-118"></span><span id="local-6989586621681039011"><span id="local-6989586621681039012"><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.html#stmtsToInstrs"><span class="hs-identifier hs-type">stmtsToInstrs</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Cmm.Node.html#CmmNode"><span class="hs-identifier hs-type">CmmNode</span></a></span><span> </span><span class="annot"><a href="#local-6989586621681039012"><span class="hs-identifier hs-type">e</span></a></span><span> </span><span class="annot"><a href="#local-6989586621681039011"><span class="hs-identifier hs-type">x</span></a></span><span class="hs-special">]</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.Monad.html#NatM"><span class="hs-identifier hs-type">NatM</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#InstrBlock"><span class="hs-identifier hs-type">InstrBlock</span></a></span></span></span><span>
</span><span id="line-119"></span><span id="stmtsToInstrs"><span class="annot"><span class="annottext">stmtsToInstrs :: forall (e :: Extensibility) (x :: Extensibility).
[CmmNode e x] -&gt; NatM InstrBlock
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.html#stmtsToInstrs"><span class="hs-identifier hs-var hs-var">stmtsToInstrs</span></a></span></span><span> </span><span id="local-6989586621681038764"><span class="annot"><span class="annottext">[CmmNode e x]
</span><a href="#local-6989586621681038764"><span class="hs-identifier hs-var">stmts</span></a></span></span><span>
</span><span id="line-120"></span><span>   </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span> </span><span id="local-6989586621681038763"><span class="annot"><span class="annottext">[InstrBlock]
</span><a href="#local-6989586621681038763"><span class="hs-identifier hs-var">instrss</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">(CmmNode e x -&gt; NatM InstrBlock)
-&gt; [CmmNode e x] -&gt; NatM [InstrBlock]
forall (t :: * -&gt; *) (m :: * -&gt; *) a b.
(Traversable t, Monad m) =&gt;
(a -&gt; m b) -&gt; t a -&gt; m (t b)
</span><a href="../../base/src/Data.Traversable.html#mapM"><span class="hs-identifier hs-var">mapM</span></a></span><span> </span><span class="annot"><span class="annottext">CmmNode e x -&gt; NatM InstrBlock
forall (e :: Extensibility) (x :: Extensibility).
CmmNode e x -&gt; NatM InstrBlock
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.html#stmtToInstrs"><span class="hs-identifier hs-var">stmtToInstrs</span></a></span><span> </span><span class="annot"><span class="annottext">[CmmNode e x]
</span><a href="#local-6989586621681038764"><span class="hs-identifier hs-var">stmts</span></a></span><span>
</span><span id="line-121"></span><span>        </span><span class="annot"><span class="annottext">InstrBlock -&gt; NatM InstrBlock
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">[InstrBlock] -&gt; InstrBlock
forall a. [OrdList a] -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#concatOL"><span class="hs-identifier hs-var">concatOL</span></a></span><span> </span><span class="annot"><span class="annottext">[InstrBlock]
</span><a href="#local-6989586621681038763"><span class="hs-identifier hs-var">instrss</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-122"></span><span>
</span><span id="line-123"></span><span>
</span><span id="line-124"></span><span id="local-6989586621681039009"><span id="local-6989586621681039010"><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.html#stmtToInstrs"><span class="hs-identifier hs-type">stmtToInstrs</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Cmm.Node.html#CmmNode"><span class="hs-identifier hs-type">CmmNode</span></a></span><span> </span><span class="annot"><a href="#local-6989586621681039010"><span class="hs-identifier hs-type">e</span></a></span><span> </span><span class="annot"><a href="#local-6989586621681039009"><span class="hs-identifier hs-type">x</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.Monad.html#NatM"><span class="hs-identifier hs-type">NatM</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#InstrBlock"><span class="hs-identifier hs-type">InstrBlock</span></a></span></span></span><span>
</span><span id="line-125"></span><span id="stmtToInstrs"><span class="annot"><span class="annottext">stmtToInstrs :: forall (e :: Extensibility) (x :: Extensibility).
CmmNode e x -&gt; NatM InstrBlock
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.html#stmtToInstrs"><span class="hs-identifier hs-var hs-var">stmtToInstrs</span></a></span></span><span> </span><span id="local-6989586621681038758"><span class="annot"><span class="annottext">CmmNode e x
</span><a href="#local-6989586621681038758"><span class="hs-identifier hs-var">stmt</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-126"></span><span>  </span><span id="local-6989586621681038757"><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681038757"><span class="hs-identifier hs-var">platform</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">NatM Platform
</span><a href="GHC.CmmToAsm.Monad.html#getPlatform"><span class="hs-identifier hs-var">getPlatform</span></a></span><span>
</span><span id="line-127"></span><span>  </span><span id="local-6989586621681038756"><span class="annot"><span class="annottext">NCGConfig
</span><a href="#local-6989586621681038756"><span class="hs-identifier hs-var">config</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">NatM NCGConfig
</span><a href="GHC.CmmToAsm.Monad.html#getConfig"><span class="hs-identifier hs-var">getConfig</span></a></span><span>
</span><span id="line-128"></span><span>  </span><span class="hs-keyword">case</span><span> </span><span class="annot"><span class="annottext">CmmNode e x
</span><a href="#local-6989586621681038758"><span class="hs-identifier hs-var">stmt</span></a></span><span> </span><span class="hs-keyword">of</span><span>
</span><span id="line-129"></span><span>    </span><span class="annot"><a href="GHC.Cmm.Node.html#CmmComment"><span class="hs-identifier hs-type">CmmComment</span></a></span><span> </span><span id="local-6989586621681038751"><span class="annot"><span class="annottext">FastString
</span><a href="#local-6989586621681038751"><span class="hs-identifier hs-var">s</span></a></span></span><span>   </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">InstrBlock -&gt; NatM InstrBlock
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Instr -&gt; InstrBlock
forall a. a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#unitOL"><span class="hs-identifier hs-var">unitOL</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">FastString -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#COMMENT"><span class="hs-identifier hs-var">COMMENT</span></a></span><span> </span><span class="annot"><span class="annottext">FastString
</span><a href="#local-6989586621681038751"><span class="hs-identifier hs-var">s</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><span id="line-130"></span><span>    </span><span class="annot"><a href="GHC.Cmm.Node.html#CmmTick"><span class="hs-identifier hs-type">CmmTick</span></a></span><span> </span><span class="hs-special">{</span><span class="hs-special">}</span><span>     </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">InstrBlock -&gt; NatM InstrBlock
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="annot"><span class="annottext">InstrBlock
forall a. OrdList a
</span><a href="GHC.Data.OrdList.html#nilOL"><span class="hs-identifier hs-var">nilOL</span></a></span><span>
</span><span id="line-131"></span><span>    </span><span class="annot"><a href="GHC.Cmm.Node.html#CmmUnwind"><span class="hs-identifier hs-type">CmmUnwind</span></a></span><span> </span><span class="hs-special">{</span><span class="hs-special">}</span><span>   </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">InstrBlock -&gt; NatM InstrBlock
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="annot"><span class="annottext">InstrBlock
forall a. OrdList a
</span><a href="GHC.Data.OrdList.html#nilOL"><span class="hs-identifier hs-var">nilOL</span></a></span><span>
</span><span id="line-132"></span><span>
</span><span id="line-133"></span><span>    </span><span class="annot"><a href="GHC.Cmm.Node.html#CmmAssign"><span class="hs-identifier hs-type">CmmAssign</span></a></span><span> </span><span id="local-6989586621681038736"><span class="annot"><span class="annottext">CmmReg
</span><a href="#local-6989586621681038736"><span class="hs-identifier hs-var">reg</span></a></span></span><span> </span><span id="local-6989586621681038735"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681038735"><span class="hs-identifier hs-var">src</span></a></span></span><span>
</span><span id="line-134"></span><span>      </span><span class="hs-glyph">|</span><span> </span><span class="annot"><span class="annottext">CmmType -&gt; Bool
</span><a href="GHC.Cmm.Type.html#isFloatType"><span class="hs-identifier hs-var">isFloatType</span></a></span><span> </span><span class="annot"><span class="annottext">CmmType
</span><a href="#local-6989586621681038733"><span class="hs-identifier hs-var">ty</span></a></span><span>  </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Format -&gt; CmmReg -&gt; CmmExpr -&gt; NatM InstrBlock
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.html#assignReg_FltCode"><span class="hs-identifier hs-var">assignReg_FltCode</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681038731"><span class="hs-identifier hs-var">format</span></a></span><span> </span><span class="annot"><span class="annottext">CmmReg
</span><a href="#local-6989586621681038736"><span class="hs-identifier hs-var">reg</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681038735"><span class="hs-identifier hs-var">src</span></a></span><span>
</span><span id="line-135"></span><span>      </span><span class="hs-glyph">|</span><span> </span><span class="annot"><span class="annottext">CmmType -&gt; Bool
</span><a href="GHC.Cmm.Type.html#isWord64"><span class="hs-identifier hs-var">isWord64</span></a></span><span> </span><span class="annot"><span class="annottext">CmmType
</span><a href="#local-6989586621681038733"><span class="hs-identifier hs-var">ty</span></a></span><span>     </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">CmmReg -&gt; CmmExpr -&gt; NatM InstrBlock
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen64.html#assignReg_I64Code"><span class="hs-identifier hs-var">assignReg_I64Code</span></a></span><span>        </span><span class="annot"><span class="annottext">CmmReg
</span><a href="#local-6989586621681038736"><span class="hs-identifier hs-var">reg</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681038735"><span class="hs-identifier hs-var">src</span></a></span><span>
</span><span id="line-136"></span><span>      </span><span class="hs-glyph">|</span><span> </span><span class="annot"><span class="annottext">Bool
</span><a href="../../base/src/GHC.Base.html#otherwise"><span class="hs-identifier hs-var">otherwise</span></a></span><span>       </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Format -&gt; CmmReg -&gt; CmmExpr -&gt; NatM InstrBlock
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.html#assignReg_IntCode"><span class="hs-identifier hs-var">assignReg_IntCode</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681038731"><span class="hs-identifier hs-var">format</span></a></span><span> </span><span class="annot"><span class="annottext">CmmReg
</span><a href="#local-6989586621681038736"><span class="hs-identifier hs-var">reg</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681038735"><span class="hs-identifier hs-var">src</span></a></span><span>
</span><span id="line-137"></span><span>        </span><span class="hs-keyword">where</span><span> </span><span id="local-6989586621681038733"><span class="annot"><span class="annottext">ty :: CmmType
</span><a href="#local-6989586621681038733"><span class="hs-identifier hs-var hs-var">ty</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Platform -&gt; CmmReg -&gt; CmmType
</span><a href="GHC.Cmm.Expr.html#cmmRegType"><span class="hs-identifier hs-var">cmmRegType</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681038757"><span class="hs-identifier hs-var">platform</span></a></span><span> </span><span class="annot"><span class="annottext">CmmReg
</span><a href="#local-6989586621681038736"><span class="hs-identifier hs-var">reg</span></a></span><span>
</span><span id="line-138"></span><span>              </span><span id="local-6989586621681038731"><span class="annot"><span class="annottext">format :: Format
</span><a href="#local-6989586621681038731"><span class="hs-identifier hs-var hs-var">format</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">CmmType -&gt; Format
</span><a href="GHC.CmmToAsm.Format.html#cmmTypeFormat"><span class="hs-identifier hs-var">cmmTypeFormat</span></a></span><span> </span><span class="annot"><span class="annottext">CmmType
</span><a href="#local-6989586621681038733"><span class="hs-identifier hs-var">ty</span></a></span><span>
</span><span id="line-139"></span><span>
</span><span id="line-140"></span><span>    </span><span class="annot"><a href="GHC.Cmm.Node.html#CmmStore"><span class="hs-identifier hs-type">CmmStore</span></a></span><span> </span><span id="local-6989586621681038722"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681038722"><span class="hs-identifier hs-var">addr</span></a></span></span><span> </span><span id="local-6989586621681038721"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681038721"><span class="hs-identifier hs-var">src</span></a></span></span><span>
</span><span id="line-141"></span><span>      </span><span class="hs-glyph">|</span><span> </span><span class="annot"><span class="annottext">CmmType -&gt; Bool
</span><a href="GHC.Cmm.Type.html#isFloatType"><span class="hs-identifier hs-var">isFloatType</span></a></span><span> </span><span class="annot"><span class="annottext">CmmType
</span><a href="#local-6989586621681038720"><span class="hs-identifier hs-var">ty</span></a></span><span>  </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Format -&gt; CmmExpr -&gt; CmmExpr -&gt; NatM InstrBlock
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.html#assignMem_FltCode"><span class="hs-identifier hs-var">assignMem_FltCode</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681038718"><span class="hs-identifier hs-var">format</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681038722"><span class="hs-identifier hs-var">addr</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681038721"><span class="hs-identifier hs-var">src</span></a></span><span>
</span><span id="line-142"></span><span>      </span><span class="hs-glyph">|</span><span> </span><span class="annot"><span class="annottext">CmmType -&gt; Bool
</span><a href="GHC.Cmm.Type.html#isWord64"><span class="hs-identifier hs-var">isWord64</span></a></span><span> </span><span class="annot"><span class="annottext">CmmType
</span><a href="#local-6989586621681038720"><span class="hs-identifier hs-var">ty</span></a></span><span>     </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">CmmExpr -&gt; CmmExpr -&gt; NatM InstrBlock
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen64.html#assignMem_I64Code"><span class="hs-identifier hs-var">assignMem_I64Code</span></a></span><span>      </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681038722"><span class="hs-identifier hs-var">addr</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681038721"><span class="hs-identifier hs-var">src</span></a></span><span>
</span><span id="line-143"></span><span>      </span><span class="hs-glyph">|</span><span> </span><span class="annot"><span class="annottext">Bool
</span><a href="../../base/src/GHC.Base.html#otherwise"><span class="hs-identifier hs-var">otherwise</span></a></span><span>       </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Format -&gt; CmmExpr -&gt; CmmExpr -&gt; NatM InstrBlock
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.html#assignMem_IntCode"><span class="hs-identifier hs-var">assignMem_IntCode</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681038718"><span class="hs-identifier hs-var">format</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681038722"><span class="hs-identifier hs-var">addr</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681038721"><span class="hs-identifier hs-var">src</span></a></span><span>
</span><span id="line-144"></span><span>        </span><span class="hs-keyword">where</span><span> </span><span id="local-6989586621681038720"><span class="annot"><span class="annottext">ty :: CmmType
</span><a href="#local-6989586621681038720"><span class="hs-identifier hs-var hs-var">ty</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Platform -&gt; CmmExpr -&gt; CmmType
</span><a href="GHC.Cmm.Expr.html#cmmExprType"><span class="hs-identifier hs-var">cmmExprType</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681038757"><span class="hs-identifier hs-var">platform</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681038721"><span class="hs-identifier hs-var">src</span></a></span><span>
</span><span id="line-145"></span><span>              </span><span id="local-6989586621681038718"><span class="annot"><span class="annottext">format :: Format
</span><a href="#local-6989586621681038718"><span class="hs-identifier hs-var hs-var">format</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">CmmType -&gt; Format
</span><a href="GHC.CmmToAsm.Format.html#cmmTypeFormat"><span class="hs-identifier hs-var">cmmTypeFormat</span></a></span><span> </span><span class="annot"><span class="annottext">CmmType
</span><a href="#local-6989586621681038720"><span class="hs-identifier hs-var">ty</span></a></span><span>
</span><span id="line-146"></span><span>
</span><span id="line-147"></span><span>    </span><span class="annot"><a href="GHC.Cmm.Node.html#CmmUnsafeForeignCall"><span class="hs-identifier hs-type">CmmUnsafeForeignCall</span></a></span><span> </span><span id="local-6989586621681038711"><span class="annot"><span class="annottext">ForeignTarget
</span><a href="#local-6989586621681038711"><span class="hs-identifier hs-var">target</span></a></span></span><span> </span><span id="local-6989586621681038710"><span class="annot"><span class="annottext">[CmmFormal]
</span><a href="#local-6989586621681038710"><span class="hs-identifier hs-var">result_regs</span></a></span></span><span> </span><span id="local-6989586621681038709"><span class="annot"><span class="annottext">[CmmExpr]
</span><a href="#local-6989586621681038709"><span class="hs-identifier hs-var">args</span></a></span></span><span>
</span><span id="line-148"></span><span>       </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">ForeignTarget -&gt; [CmmFormal] -&gt; [CmmExpr] -&gt; NatM InstrBlock
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.html#genCCall"><span class="hs-identifier hs-var">genCCall</span></a></span><span> </span><span class="annot"><span class="annottext">ForeignTarget
</span><a href="#local-6989586621681038711"><span class="hs-identifier hs-var">target</span></a></span><span> </span><span class="annot"><span class="annottext">[CmmFormal]
</span><a href="#local-6989586621681038710"><span class="hs-identifier hs-var">result_regs</span></a></span><span> </span><span class="annot"><span class="annottext">[CmmExpr]
</span><a href="#local-6989586621681038709"><span class="hs-identifier hs-var">args</span></a></span><span>
</span><span id="line-149"></span><span>
</span><span id="line-150"></span><span>    </span><span class="annot"><a href="GHC.Cmm.Node.html#CmmBranch"><span class="hs-identifier hs-type">CmmBranch</span></a></span><span>   </span><span id="local-6989586621681038704"><span class="annot"><span class="annottext">Label
</span><a href="#local-6989586621681038704"><span class="hs-identifier hs-var">id</span></a></span></span><span>              </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Label -&gt; NatM InstrBlock
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.html#genBranch"><span class="hs-identifier hs-var">genBranch</span></a></span><span> </span><span class="annot"><span class="annottext">Label
</span><a href="#local-6989586621681038704"><span class="hs-identifier hs-var">id</span></a></span><span>
</span><span id="line-151"></span><span>    </span><span class="annot"><a href="GHC.Cmm.Node.html#CmmCondBranch"><span class="hs-identifier hs-type">CmmCondBranch</span></a></span><span> </span><span id="local-6989586621681038696"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681038696"><span class="hs-identifier hs-var">arg</span></a></span></span><span> </span><span id="local-6989586621681038695"><span class="annot"><span class="annottext">Label
</span><a href="#local-6989586621681038695"><span class="hs-identifier hs-var">true</span></a></span></span><span> </span><span id="local-6989586621681038694"><span class="annot"><span class="annottext">Label
</span><a href="#local-6989586621681038694"><span class="hs-identifier hs-var">false</span></a></span></span><span> </span><span class="annot"><span class="annottext">Maybe Bool
</span><span class="hs-identifier">_</span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-152"></span><span>      </span><span id="local-6989586621681038693"><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681038693"><span class="hs-identifier hs-var">b1</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">Label -&gt; CmmExpr -&gt; NatM InstrBlock
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.html#genCondJump"><span class="hs-identifier hs-var">genCondJump</span></a></span><span> </span><span class="annot"><span class="annottext">Label
</span><a href="#local-6989586621681038695"><span class="hs-identifier hs-var">true</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681038696"><span class="hs-identifier hs-var">arg</span></a></span><span>
</span><span id="line-153"></span><span>      </span><span id="local-6989586621681038691"><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681038691"><span class="hs-identifier hs-var">b2</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">Label -&gt; NatM InstrBlock
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.html#genBranch"><span class="hs-identifier hs-var">genBranch</span></a></span><span> </span><span class="annot"><span class="annottext">Label
</span><a href="#local-6989586621681038694"><span class="hs-identifier hs-var">false</span></a></span><span>
</span><span id="line-154"></span><span>      </span><span class="annot"><span class="annottext">InstrBlock -&gt; NatM InstrBlock
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681038693"><span class="hs-identifier hs-var">b1</span></a></span><span> </span><span class="annot"><span class="annottext">InstrBlock -&gt; InstrBlock -&gt; InstrBlock
forall a. OrdList a -&gt; OrdList a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#appOL"><span class="hs-operator hs-var">`appOL`</span></a></span><span> </span><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681038691"><span class="hs-identifier hs-var">b2</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-155"></span><span>    </span><span class="annot"><a href="GHC.Cmm.Node.html#CmmSwitch"><span class="hs-identifier hs-type">CmmSwitch</span></a></span><span> </span><span id="local-6989586621681038687"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681038687"><span class="hs-identifier hs-var">arg</span></a></span></span><span> </span><span id="local-6989586621681038686"><span class="annot"><span class="annottext">SwitchTargets
</span><a href="#local-6989586621681038686"><span class="hs-identifier hs-var">ids</span></a></span></span><span>   </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">NCGConfig -&gt; CmmExpr -&gt; SwitchTargets -&gt; NatM InstrBlock
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.html#genSwitch"><span class="hs-identifier hs-var">genSwitch</span></a></span><span> </span><span class="annot"><span class="annottext">NCGConfig
</span><a href="#local-6989586621681038756"><span class="hs-identifier hs-var">config</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681038687"><span class="hs-identifier hs-var">arg</span></a></span><span> </span><span class="annot"><span class="annottext">SwitchTargets
</span><a href="#local-6989586621681038686"><span class="hs-identifier hs-var">ids</span></a></span><span>
</span><span id="line-156"></span><span>    </span><span class="annot"><a href="GHC.Cmm.Node.html#CmmCall"><span class="hs-identifier hs-type">CmmCall</span></a></span><span> </span><span class="hs-special">{</span><span> </span><span class="annot"><span class="annottext">cml_target :: CmmNode O C -&gt; CmmExpr
</span><a href="GHC.Cmm.Node.html#cml_target"><span class="hs-identifier hs-var">cml_target</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span id="local-6989586621681038680"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681038680"><span class="hs-identifier hs-var">arg</span></a></span></span><span> </span><span class="hs-special">}</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">CmmExpr -&gt; NatM InstrBlock
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.html#genJump"><span class="hs-identifier hs-var">genJump</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681038680"><span class="hs-identifier hs-var">arg</span></a></span><span>
</span><span id="line-157"></span><span>
</span><span id="line-158"></span><span>    </span><span class="annot"><span class="annottext">CmmNode e x
</span><span class="hs-identifier">_</span></span><span>
</span><span id="line-159"></span><span>     </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">String -&gt; NatM InstrBlock
forall a. String -&gt; a
</span><a href="GHC.Utils.Panic.Plain.html#panic"><span class="hs-identifier hs-var">panic</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;stmtToInstrs: statement should have been cps'd away&quot;</span></span><span>
</span><span id="line-160"></span><span>
</span><span id="line-161"></span><span>
</span><span id="line-162"></span><span class="hs-comment">{-
Now, given a tree (the argument to a CmmLoad) that references memory,
produce a suitable addressing mode.

A Rule of the Game (tm) for Amodes: use of the addr bit must
immediately follow use of the code part, since the code part puts
values in registers which the addr then refers to.  So you can't put
anything in between, lest it overwrite some of those registers.  If
you need to do some other computation between the code part and use of
the addr bit, first store the effective address from the amode in a
temporary, then do the other computation, and then use the temporary:

    code
    LEA amode, tmp
    ... other computation ...
    ... (tmp) ...
-}</span><span>
</span><span id="line-179"></span><span>
</span><span id="line-180"></span><span>
</span><span id="line-181"></span><span>
</span><span id="line-182"></span><span class="hs-comment">-- | Convert a BlockId to some CmmStatic data</span><span>
</span><span id="line-183"></span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.html#jumpTableEntry"><span class="hs-identifier hs-type">jumpTableEntry</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="../../ghc-boot/src/GHC.Platform.html#Platform"><span class="hs-identifier hs-type">Platform</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="../../base/src/GHC.Maybe.html#Maybe"><span class="hs-identifier hs-type">Maybe</span></a></span><span> </span><span class="annot"><a href="GHC.Cmm.BlockId.html#BlockId"><span class="hs-identifier hs-type">BlockId</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.html#CmmStatic"><span class="hs-identifier hs-type">CmmStatic</span></a></span><span>
</span><span id="line-184"></span><span id="jumpTableEntry"><span class="annot"><span class="annottext">jumpTableEntry :: Platform -&gt; Maybe Label -&gt; CmmStatic
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.html#jumpTableEntry"><span class="hs-identifier hs-var hs-var">jumpTableEntry</span></a></span></span><span> </span><span id="local-6989586621681038675"><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681038675"><span class="hs-identifier hs-var">platform</span></a></span></span><span> </span><span class="annot"><span class="annottext">Maybe Label
</span><a href="../../base/src/GHC.Maybe.html#Nothing"><span class="hs-identifier hs-var">Nothing</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">CmmLit -&gt; CmmStatic
</span><a href="GHC.Cmm.html#CmmStaticLit"><span class="hs-identifier hs-var">CmmStaticLit</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Integer -&gt; Width -&gt; CmmLit
</span><a href="GHC.Cmm.Expr.html#CmmInt"><span class="hs-identifier hs-var">CmmInt</span></a></span><span> </span><span class="annot"><span class="annottext">Integer
</span><span class="hs-number">0</span></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Platform -&gt; Width
</span><a href="GHC.Cmm.Type.html#wordWidth"><span class="hs-identifier hs-var">wordWidth</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681038675"><span class="hs-identifier hs-var">platform</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><span id="line-185"></span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.html#jumpTableEntry"><span class="hs-identifier hs-var">jumpTableEntry</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><span class="hs-identifier">_</span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="../../base/src/GHC.Maybe.html#Just"><span class="hs-identifier hs-type">Just</span></a></span><span> </span><span id="local-6989586621681038671"><span class="annot"><span class="annottext">Label
</span><a href="#local-6989586621681038671"><span class="hs-identifier hs-var">blockid</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">CmmLit -&gt; CmmStatic
</span><a href="GHC.Cmm.html#CmmStaticLit"><span class="hs-identifier hs-var">CmmStaticLit</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">CLabel -&gt; CmmLit
</span><a href="GHC.Cmm.Expr.html#CmmLabel"><span class="hs-identifier hs-var">CmmLabel</span></a></span><span> </span><span class="annot"><span class="annottext">CLabel
</span><a href="#local-6989586621681038669"><span class="hs-identifier hs-var">blockLabel</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-186"></span><span>    </span><span class="hs-keyword">where</span><span> </span><span id="local-6989586621681038669"><span class="annot"><span class="annottext">blockLabel :: CLabel
</span><a href="#local-6989586621681038669"><span class="hs-identifier hs-var hs-var">blockLabel</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Label -&gt; CLabel
</span><a href="GHC.Cmm.BlockId.html#blockLbl"><span class="hs-identifier hs-var">blockLbl</span></a></span><span> </span><span class="annot"><span class="annottext">Label
</span><a href="#local-6989586621681038671"><span class="hs-identifier hs-var">blockid</span></a></span><span>
</span><span id="line-187"></span><span>
</span><span id="line-188"></span><span>
</span><span id="line-189"></span><span>
</span><span id="line-190"></span><span class="hs-comment">-- -----------------------------------------------------------------------------</span><span>
</span><span id="line-191"></span><span class="hs-comment">-- Generating assignments</span><span>
</span><span id="line-192"></span><span>
</span><span id="line-193"></span><span class="hs-comment">-- Assignments are really at the heart of the whole code generation</span><span>
</span><span id="line-194"></span><span class="hs-comment">-- business.  Almost all top-level nodes of any real importance are</span><span>
</span><span id="line-195"></span><span class="hs-comment">-- assignments, which correspond to loads, stores, or register</span><span>
</span><span id="line-196"></span><span class="hs-comment">-- transfers.  If we're really lucky, some of the register transfers</span><span>
</span><span id="line-197"></span><span class="hs-comment">-- will go away, because we can use the destination register to</span><span>
</span><span id="line-198"></span><span class="hs-comment">-- complete the code generation for the right hand side.  This only</span><span>
</span><span id="line-199"></span><span class="hs-comment">-- fails when the right hand side is forced into a fixed register</span><span>
</span><span id="line-200"></span><span class="hs-comment">-- (e.g. the result of a call).</span><span>
</span><span id="line-201"></span><span>
</span><span id="line-202"></span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.html#assignMem_IntCode"><span class="hs-identifier hs-type">assignMem_IntCode</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.Format.html#Format"><span class="hs-identifier hs-type">Format</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmExpr"><span class="hs-identifier hs-type">CmmExpr</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmExpr"><span class="hs-identifier hs-type">CmmExpr</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.Monad.html#NatM"><span class="hs-identifier hs-type">NatM</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#InstrBlock"><span class="hs-identifier hs-type">InstrBlock</span></a></span><span>
</span><span id="line-203"></span><span id="assignMem_IntCode"><span class="annot"><span class="annottext">assignMem_IntCode :: Format -&gt; CmmExpr -&gt; CmmExpr -&gt; NatM InstrBlock
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.html#assignMem_IntCode"><span class="hs-identifier hs-var hs-var">assignMem_IntCode</span></a></span></span><span> </span><span id="local-6989586621681038667"><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681038667"><span class="hs-identifier hs-var">pk</span></a></span></span><span> </span><span id="local-6989586621681038666"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681038666"><span class="hs-identifier hs-var">addr</span></a></span></span><span> </span><span id="local-6989586621681038665"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681038665"><span class="hs-identifier hs-var">src</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-204"></span><span>    </span><span class="hs-special">(</span><span id="local-6989586621681038664"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681038664"><span class="hs-identifier hs-var">srcReg</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681038663"><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681038663"><span class="hs-identifier hs-var">code</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">CmmExpr -&gt; NatM (Reg, InstrBlock)
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#getSomeReg"><span class="hs-identifier hs-var">getSomeReg</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681038665"><span class="hs-identifier hs-var">src</span></a></span><span>
</span><span id="line-205"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#Amode"><span class="hs-identifier hs-type">Amode</span></a></span><span> </span><span id="local-6989586621681038660"><span class="annot"><span class="annottext">AddrMode
</span><a href="#local-6989586621681038660"><span class="hs-identifier hs-var">dstAddr</span></a></span></span><span> </span><span id="local-6989586621681038659"><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681038659"><span class="hs-identifier hs-var">addr_code</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">CmmExpr -&gt; NatM Amode
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Amode.html#getAmode"><span class="hs-identifier hs-var">getAmode</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681038666"><span class="hs-identifier hs-var">addr</span></a></span><span>
</span><span id="line-206"></span><span>    </span><span class="annot"><span class="annottext">InstrBlock -&gt; NatM InstrBlock
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="annot"><span class="annottext">(InstrBlock -&gt; NatM InstrBlock) -&gt; InstrBlock -&gt; NatM InstrBlock
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681038663"><span class="hs-identifier hs-var">code</span></a></span><span> </span><span class="annot"><span class="annottext">InstrBlock -&gt; InstrBlock -&gt; InstrBlock
forall a. OrdList a -&gt; OrdList a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#appOL"><span class="hs-operator hs-var">`appOL`</span></a></span><span> </span><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681038659"><span class="hs-identifier hs-var">addr_code</span></a></span><span> </span><span class="annot"><span class="annottext">InstrBlock -&gt; Instr -&gt; InstrBlock
forall a. OrdList a -&gt; a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#snocOL"><span class="hs-operator hs-var">`snocOL`</span></a></span><span> </span><span class="annot"><span class="annottext">Format -&gt; Reg -&gt; AddrMode -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#ST"><span class="hs-identifier hs-var">ST</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681038667"><span class="hs-identifier hs-var">pk</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681038664"><span class="hs-identifier hs-var">srcReg</span></a></span><span> </span><span class="annot"><span class="annottext">AddrMode
</span><a href="#local-6989586621681038660"><span class="hs-identifier hs-var">dstAddr</span></a></span><span>
</span><span id="line-207"></span><span>
</span><span id="line-208"></span><span>
</span><span id="line-209"></span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.html#assignReg_IntCode"><span class="hs-identifier hs-type">assignReg_IntCode</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.Format.html#Format"><span class="hs-identifier hs-type">Format</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmReg"><span class="hs-identifier hs-type">CmmReg</span></a></span><span>  </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmExpr"><span class="hs-identifier hs-type">CmmExpr</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.Monad.html#NatM"><span class="hs-identifier hs-type">NatM</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#InstrBlock"><span class="hs-identifier hs-type">InstrBlock</span></a></span><span>
</span><span id="line-210"></span><span id="assignReg_IntCode"><span class="annot"><span class="annottext">assignReg_IntCode :: Format -&gt; CmmReg -&gt; CmmExpr -&gt; NatM InstrBlock
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.html#assignReg_IntCode"><span class="hs-identifier hs-var hs-var">assignReg_IntCode</span></a></span></span><span> </span><span class="annot"><span class="annottext">Format
</span><span class="hs-identifier">_</span></span><span> </span><span id="local-6989586621681038655"><span class="annot"><span class="annottext">CmmReg
</span><a href="#local-6989586621681038655"><span class="hs-identifier hs-var">reg</span></a></span></span><span> </span><span id="local-6989586621681038654"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681038654"><span class="hs-identifier hs-var">src</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-211"></span><span>    </span><span id="local-6989586621681038653"><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681038653"><span class="hs-identifier hs-var">platform</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">NatM Platform
</span><a href="GHC.CmmToAsm.Monad.html#getPlatform"><span class="hs-identifier hs-var">getPlatform</span></a></span><span>
</span><span id="line-212"></span><span>    </span><span id="local-6989586621681038652"><span class="annot"><span class="annottext">Register
</span><a href="#local-6989586621681038652"><span class="hs-identifier hs-var">r</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">CmmExpr -&gt; NatM Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#getRegister"><span class="hs-identifier hs-var">getRegister</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681038654"><span class="hs-identifier hs-var">src</span></a></span><span>
</span><span id="line-213"></span><span>    </span><span class="hs-keyword">let</span><span> </span><span id="local-6989586621681038650"><span class="annot"><span class="annottext">dst :: Reg
</span><a href="#local-6989586621681038650"><span class="hs-identifier hs-var hs-var">dst</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Platform -&gt; CmmReg -&gt; Reg
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#getRegisterReg"><span class="hs-identifier hs-var">getRegisterReg</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681038653"><span class="hs-identifier hs-var">platform</span></a></span><span> </span><span class="annot"><span class="annottext">CmmReg
</span><a href="#local-6989586621681038655"><span class="hs-identifier hs-var">reg</span></a></span><span>
</span><span id="line-214"></span><span>    </span><span class="annot"><span class="annottext">InstrBlock -&gt; NatM InstrBlock
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="annot"><span class="annottext">(InstrBlock -&gt; NatM InstrBlock) -&gt; InstrBlock -&gt; NatM InstrBlock
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="hs-keyword">case</span><span> </span><span class="annot"><span class="annottext">Register
</span><a href="#local-6989586621681038652"><span class="hs-identifier hs-var">r</span></a></span><span> </span><span class="hs-keyword">of</span><span>
</span><span id="line-215"></span><span>        </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#Any"><span class="hs-identifier hs-type">Any</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><span class="hs-identifier">_</span></span><span> </span><span id="local-6989586621681038647"><span class="annot"><span class="annottext">Reg -&gt; InstrBlock
</span><a href="#local-6989586621681038647"><span class="hs-identifier hs-var">code</span></a></span></span><span>         </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Reg -&gt; InstrBlock
</span><a href="#local-6989586621681038647"><span class="hs-identifier hs-var">code</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681038650"><span class="hs-identifier hs-var">dst</span></a></span><span>
</span><span id="line-216"></span><span>        </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#Fixed"><span class="hs-identifier hs-type">Fixed</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><span class="hs-identifier">_</span></span><span> </span><span id="local-6989586621681038645"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681038645"><span class="hs-identifier hs-var">freg</span></a></span></span><span> </span><span id="local-6989586621681038644"><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681038644"><span class="hs-identifier hs-var">fcode</span></a></span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681038644"><span class="hs-identifier hs-var">fcode</span></a></span><span> </span><span class="annot"><span class="annottext">InstrBlock -&gt; Instr -&gt; InstrBlock
forall a. OrdList a -&gt; a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#snocOL"><span class="hs-operator hs-var">`snocOL`</span></a></span><span> </span><span class="annot"><span class="annottext">Bool -&gt; Reg -&gt; RI -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#OR"><span class="hs-identifier hs-var">OR</span></a></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="GHC.CmmToAsm.SPARC.Regs.html#g0"><span class="hs-identifier hs-var">g0</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; RI
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#RIReg"><span class="hs-identifier hs-var">RIReg</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681038645"><span class="hs-identifier hs-var">freg</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681038650"><span class="hs-identifier hs-var">dst</span></a></span><span>
</span><span id="line-217"></span><span>
</span><span id="line-218"></span><span>
</span><span id="line-219"></span><span>
</span><span id="line-220"></span><span class="hs-comment">-- Floating point assignment to memory</span><span>
</span><span id="line-221"></span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.html#assignMem_FltCode"><span class="hs-identifier hs-type">assignMem_FltCode</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.Format.html#Format"><span class="hs-identifier hs-type">Format</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmExpr"><span class="hs-identifier hs-type">CmmExpr</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmExpr"><span class="hs-identifier hs-type">CmmExpr</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.Monad.html#NatM"><span class="hs-identifier hs-type">NatM</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#InstrBlock"><span class="hs-identifier hs-type">InstrBlock</span></a></span><span>
</span><span id="line-222"></span><span id="assignMem_FltCode"><span class="annot"><span class="annottext">assignMem_FltCode :: Format -&gt; CmmExpr -&gt; CmmExpr -&gt; NatM InstrBlock
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.html#assignMem_FltCode"><span class="hs-identifier hs-var hs-var">assignMem_FltCode</span></a></span></span><span> </span><span id="local-6989586621681038640"><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681038640"><span class="hs-identifier hs-var">pk</span></a></span></span><span> </span><span id="local-6989586621681038639"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681038639"><span class="hs-identifier hs-var">addr</span></a></span></span><span> </span><span id="local-6989586621681038638"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681038638"><span class="hs-identifier hs-var">src</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-223"></span><span>    </span><span id="local-6989586621681038637"><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681038637"><span class="hs-identifier hs-var">platform</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">NatM Platform
</span><a href="GHC.CmmToAsm.Monad.html#getPlatform"><span class="hs-identifier hs-var">getPlatform</span></a></span><span>
</span><span id="line-224"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#Amode"><span class="hs-identifier hs-type">Amode</span></a></span><span> </span><span id="local-6989586621681038636"><span class="annot"><span class="annottext">AddrMode
</span><a href="#local-6989586621681038636"><span class="hs-identifier hs-var">dst__2</span></a></span></span><span> </span><span id="local-6989586621681038635"><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681038635"><span class="hs-identifier hs-var">code1</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">CmmExpr -&gt; NatM Amode
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Amode.html#getAmode"><span class="hs-identifier hs-var">getAmode</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681038639"><span class="hs-identifier hs-var">addr</span></a></span><span>
</span><span id="line-225"></span><span>    </span><span class="hs-special">(</span><span id="local-6989586621681038634"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681038634"><span class="hs-identifier hs-var">src__2</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681038633"><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681038633"><span class="hs-identifier hs-var">code2</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">CmmExpr -&gt; NatM (Reg, InstrBlock)
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#getSomeReg"><span class="hs-identifier hs-var">getSomeReg</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681038638"><span class="hs-identifier hs-var">src</span></a></span><span>
</span><span id="line-226"></span><span>    </span><span id="local-6989586621681038632"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681038632"><span class="hs-identifier hs-var">tmp1</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">Format -&gt; NatM Reg
</span><a href="GHC.CmmToAsm.Monad.html#getNewRegNat"><span class="hs-identifier hs-var">getNewRegNat</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681038640"><span class="hs-identifier hs-var">pk</span></a></span><span>
</span><span id="line-227"></span><span>    </span><span class="hs-keyword">let</span><span>
</span><span id="line-228"></span><span>        </span><span id="local-6989586621681038631"><span class="annot"><span class="annottext">pk__2 :: CmmType
</span><a href="#local-6989586621681038631"><span class="hs-identifier hs-var hs-var">pk__2</span></a></span></span><span>   </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Platform -&gt; CmmExpr -&gt; CmmType
</span><a href="GHC.Cmm.Expr.html#cmmExprType"><span class="hs-identifier hs-var">cmmExprType</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681038637"><span class="hs-identifier hs-var">platform</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681038638"><span class="hs-identifier hs-var">src</span></a></span><span>
</span><span id="line-229"></span><span>        </span><span id="local-6989586621681038630"><span class="annot"><span class="annottext">code__2 :: InstrBlock
</span><a href="#local-6989586621681038630"><span class="hs-identifier hs-var hs-var">code__2</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681038635"><span class="hs-identifier hs-var">code1</span></a></span><span> </span><span class="annot"><span class="annottext">InstrBlock -&gt; InstrBlock -&gt; InstrBlock
forall a. OrdList a -&gt; OrdList a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#appOL"><span class="hs-operator hs-var">`appOL`</span></a></span><span> </span><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681038633"><span class="hs-identifier hs-var">code2</span></a></span><span> </span><span class="annot"><span class="annottext">InstrBlock -&gt; InstrBlock -&gt; InstrBlock
forall a. OrdList a -&gt; OrdList a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#appOL"><span class="hs-operator hs-var">`appOL`</span></a></span><span>
</span><span id="line-230"></span><span>            </span><span class="hs-keyword">if</span><span>   </span><span class="annot"><span class="annottext">Format -&gt; Width
</span><a href="GHC.CmmToAsm.Format.html#formatToWidth"><span class="hs-identifier hs-var">formatToWidth</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681038640"><span class="hs-identifier hs-var">pk</span></a></span><span> </span><span class="annot"><span class="annottext">Width -&gt; Width -&gt; Bool
forall a. Eq a =&gt; a -&gt; a -&gt; Bool
</span><span class="hs-operator hs-var">==</span></span><span> </span><span class="annot"><span class="annottext">CmmType -&gt; Width
</span><a href="GHC.Cmm.Type.html#typeWidth"><span class="hs-identifier hs-var">typeWidth</span></a></span><span> </span><span class="annot"><span class="annottext">CmmType
</span><a href="#local-6989586621681038631"><span class="hs-identifier hs-var">pk__2</span></a></span><span>
</span><span id="line-231"></span><span>            </span><span class="hs-keyword">then</span><span> </span><span class="annot"><span class="annottext">Instr -&gt; InstrBlock
forall a. a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#unitOL"><span class="hs-identifier hs-var">unitOL</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Format -&gt; Reg -&gt; AddrMode -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#ST"><span class="hs-identifier hs-var">ST</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681038640"><span class="hs-identifier hs-var">pk</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681038634"><span class="hs-identifier hs-var">src__2</span></a></span><span> </span><span class="annot"><span class="annottext">AddrMode
</span><a href="#local-6989586621681038636"><span class="hs-identifier hs-var">dst__2</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-232"></span><span>            </span><span class="hs-keyword">else</span><span> </span><span class="annot"><span class="annottext">[Instr] -&gt; InstrBlock
forall a. [a] -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#toOL"><span class="hs-identifier hs-var">toOL</span></a></span><span>   </span><span class="hs-special">[</span><span> </span><span class="annot"><span class="annottext">Format -&gt; Format -&gt; Reg -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#FxTOy"><span class="hs-identifier hs-var">FxTOy</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">CmmType -&gt; Format
</span><a href="GHC.CmmToAsm.Format.html#cmmTypeFormat"><span class="hs-identifier hs-var">cmmTypeFormat</span></a></span><span> </span><span class="annot"><span class="annottext">CmmType
</span><a href="#local-6989586621681038631"><span class="hs-identifier hs-var">pk__2</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681038640"><span class="hs-identifier hs-var">pk</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681038634"><span class="hs-identifier hs-var">src__2</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681038632"><span class="hs-identifier hs-var">tmp1</span></a></span><span>
</span><span id="line-233"></span><span>                        </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Format -&gt; Reg -&gt; AddrMode -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#ST"><span class="hs-identifier hs-var">ST</span></a></span><span>    </span><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681038640"><span class="hs-identifier hs-var">pk</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681038632"><span class="hs-identifier hs-var">tmp1</span></a></span><span> </span><span class="annot"><span class="annottext">AddrMode
</span><a href="#local-6989586621681038636"><span class="hs-identifier hs-var">dst__2</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-234"></span><span>    </span><span class="annot"><span class="annottext">InstrBlock -&gt; NatM InstrBlock
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681038630"><span class="hs-identifier hs-var">code__2</span></a></span><span>
</span><span id="line-235"></span><span>
</span><span id="line-236"></span><span class="hs-comment">-- Floating point assignment to a register/temporary</span><span>
</span><span id="line-237"></span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.html#assignReg_FltCode"><span class="hs-identifier hs-type">assignReg_FltCode</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.Format.html#Format"><span class="hs-identifier hs-type">Format</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmReg"><span class="hs-identifier hs-type">CmmReg</span></a></span><span>  </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmExpr"><span class="hs-identifier hs-type">CmmExpr</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.Monad.html#NatM"><span class="hs-identifier hs-type">NatM</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#InstrBlock"><span class="hs-identifier hs-type">InstrBlock</span></a></span><span>
</span><span id="line-238"></span><span id="assignReg_FltCode"><span class="annot"><span class="annottext">assignReg_FltCode :: Format -&gt; CmmReg -&gt; CmmExpr -&gt; NatM InstrBlock
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.html#assignReg_FltCode"><span class="hs-identifier hs-var hs-var">assignReg_FltCode</span></a></span></span><span> </span><span id="local-6989586621681038625"><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681038625"><span class="hs-identifier hs-var">pk</span></a></span></span><span> </span><span id="local-6989586621681038624"><span class="annot"><span class="annottext">CmmReg
</span><a href="#local-6989586621681038624"><span class="hs-identifier hs-var">dstCmmReg</span></a></span></span><span> </span><span id="local-6989586621681038623"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681038623"><span class="hs-identifier hs-var">srcCmmExpr</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-239"></span><span>    </span><span id="local-6989586621681038622"><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681038622"><span class="hs-identifier hs-var">platform</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">NatM Platform
</span><a href="GHC.CmmToAsm.Monad.html#getPlatform"><span class="hs-identifier hs-var">getPlatform</span></a></span><span>
</span><span id="line-240"></span><span>    </span><span id="local-6989586621681038621"><span class="annot"><span class="annottext">Register
</span><a href="#local-6989586621681038621"><span class="hs-identifier hs-var">srcRegister</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">CmmExpr -&gt; NatM Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#getRegister"><span class="hs-identifier hs-var">getRegister</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681038623"><span class="hs-identifier hs-var">srcCmmExpr</span></a></span><span>
</span><span id="line-241"></span><span>    </span><span class="hs-keyword">let</span><span> </span><span id="local-6989586621681038620"><span class="annot"><span class="annottext">dstReg :: Reg
</span><a href="#local-6989586621681038620"><span class="hs-identifier hs-var hs-var">dstReg</span></a></span></span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Platform -&gt; CmmReg -&gt; Reg
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#getRegisterReg"><span class="hs-identifier hs-var">getRegisterReg</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681038622"><span class="hs-identifier hs-var">platform</span></a></span><span> </span><span class="annot"><span class="annottext">CmmReg
</span><a href="#local-6989586621681038624"><span class="hs-identifier hs-var">dstCmmReg</span></a></span><span>
</span><span id="line-242"></span><span>
</span><span id="line-243"></span><span>    </span><span class="annot"><span class="annottext">InstrBlock -&gt; NatM InstrBlock
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="annot"><span class="annottext">(InstrBlock -&gt; NatM InstrBlock) -&gt; InstrBlock -&gt; NatM InstrBlock
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="hs-keyword">case</span><span> </span><span class="annot"><span class="annottext">Register
</span><a href="#local-6989586621681038621"><span class="hs-identifier hs-var">srcRegister</span></a></span><span> </span><span class="hs-keyword">of</span><span>
</span><span id="line-244"></span><span>        </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#Any"><span class="hs-identifier hs-type">Any</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><span class="hs-identifier">_</span></span><span> </span><span id="local-6989586621681038619"><span class="annot"><span class="annottext">Reg -&gt; InstrBlock
</span><a href="#local-6989586621681038619"><span class="hs-identifier hs-var">code</span></a></span></span><span>                  </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Reg -&gt; InstrBlock
</span><a href="#local-6989586621681038619"><span class="hs-identifier hs-var">code</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681038620"><span class="hs-identifier hs-var">dstReg</span></a></span><span>
</span><span id="line-245"></span><span>        </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#Fixed"><span class="hs-identifier hs-type">Fixed</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><span class="hs-identifier">_</span></span><span> </span><span id="local-6989586621681038618"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681038618"><span class="hs-identifier hs-var">srcFixedReg</span></a></span></span><span> </span><span id="local-6989586621681038617"><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681038617"><span class="hs-identifier hs-var">srcCode</span></a></span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681038617"><span class="hs-identifier hs-var">srcCode</span></a></span><span> </span><span class="annot"><span class="annottext">InstrBlock -&gt; Instr -&gt; InstrBlock
forall a. OrdList a -&gt; a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#snocOL"><span class="hs-operator hs-var">`snocOL`</span></a></span><span> </span><span class="annot"><span class="annottext">Format -&gt; Reg -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#FMOV"><span class="hs-identifier hs-var">FMOV</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681038625"><span class="hs-identifier hs-var">pk</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681038618"><span class="hs-identifier hs-var">srcFixedReg</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681038620"><span class="hs-identifier hs-var">dstReg</span></a></span><span>
</span><span id="line-246"></span><span>
</span><span id="line-247"></span><span>
</span><span id="line-248"></span><span>
</span><span id="line-249"></span><span>
</span><span id="line-250"></span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.html#genJump"><span class="hs-identifier hs-type">genJump</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmExpr"><span class="hs-identifier hs-type">CmmExpr</span></a></span><span class="hs-comment">{-the branch target-}</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.Monad.html#NatM"><span class="hs-identifier hs-type">NatM</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#InstrBlock"><span class="hs-identifier hs-type">InstrBlock</span></a></span><span>
</span><span id="line-251"></span><span>
</span><span id="line-252"></span><span id="genJump"><span class="annot"><span class="annottext">genJump :: CmmExpr -&gt; NatM InstrBlock
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.html#genJump"><span class="hs-identifier hs-var hs-var">genJump</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmLit"><span class="hs-identifier hs-type">CmmLit</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmLabel"><span class="hs-identifier hs-type">CmmLabel</span></a></span><span> </span><span id="local-6989586621681038614"><span class="annot"><span class="annottext">CLabel
</span><a href="#local-6989586621681038614"><span class="hs-identifier hs-var">lbl</span></a></span></span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><span id="line-253"></span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">InstrBlock -&gt; NatM InstrBlock
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">[Instr] -&gt; InstrBlock
forall a. [a] -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#toOL"><span class="hs-identifier hs-var">toOL</span></a></span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">Either Imm Reg -&gt; Int -&gt; Bool -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#CALL"><span class="hs-identifier hs-var">CALL</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Imm -&gt; Either Imm Reg
forall a b. a -&gt; Either a b
</span><a href="../../base/src/Data.Either.html#Left"><span class="hs-identifier hs-var">Left</span></a></span><span> </span><span class="annot"><span class="annottext">Imm
</span><a href="#local-6989586621681038612"><span class="hs-identifier hs-var">target</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">0</span></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">True</span></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#NOP"><span class="hs-identifier hs-var">NOP</span></a></span><span class="hs-special">]</span><span class="hs-special">)</span><span>
</span><span id="line-254"></span><span>  </span><span class="hs-keyword">where</span><span>
</span><span id="line-255"></span><span>    </span><span id="local-6989586621681038612"><span class="annot"><span class="annottext">target :: Imm
</span><a href="#local-6989586621681038612"><span class="hs-identifier hs-var hs-var">target</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">CLabel -&gt; Imm
</span><a href="GHC.CmmToAsm.SPARC.Imm.html#ImmCLbl"><span class="hs-identifier hs-var">ImmCLbl</span></a></span><span> </span><span class="annot"><span class="annottext">CLabel
</span><a href="#local-6989586621681038614"><span class="hs-identifier hs-var">lbl</span></a></span><span>
</span><span id="line-256"></span><span>
</span><span id="line-257"></span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.html#genJump"><span class="hs-identifier hs-var">genJump</span></a></span><span> </span><span id="local-6989586621681038609"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681038609"><span class="hs-identifier hs-var">tree</span></a></span></span><span>
</span><span id="line-258"></span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-259"></span><span>        </span><span class="hs-special">(</span><span id="local-6989586621681038608"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681038608"><span class="hs-identifier hs-var">target</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681038607"><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681038607"><span class="hs-identifier hs-var">code</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">CmmExpr -&gt; NatM (Reg, InstrBlock)
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#getSomeReg"><span class="hs-identifier hs-var">getSomeReg</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681038609"><span class="hs-identifier hs-var">tree</span></a></span><span>
</span><span id="line-260"></span><span>        </span><span class="annot"><span class="annottext">InstrBlock -&gt; NatM InstrBlock
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681038607"><span class="hs-identifier hs-var">code</span></a></span><span> </span><span class="annot"><span class="annottext">InstrBlock -&gt; Instr -&gt; InstrBlock
forall a. OrdList a -&gt; a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#snocOL"><span class="hs-operator hs-var">`snocOL`</span></a></span><span> </span><span class="annot"><span class="annottext">AddrMode -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#JMP"><span class="hs-identifier hs-var">JMP</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; Reg -&gt; AddrMode
</span><a href="GHC.CmmToAsm.SPARC.AddrMode.html#AddrRegReg"><span class="hs-identifier hs-var">AddrRegReg</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681038608"><span class="hs-identifier hs-var">target</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="GHC.CmmToAsm.SPARC.Regs.html#g0"><span class="hs-identifier hs-var">g0</span></a></span><span class="hs-special">)</span><span>  </span><span class="annot"><span class="annottext">InstrBlock -&gt; Instr -&gt; InstrBlock
forall a. OrdList a -&gt; a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#snocOL"><span class="hs-operator hs-var">`snocOL`</span></a></span><span> </span><span class="annot"><span class="annottext">Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#NOP"><span class="hs-identifier hs-var">NOP</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-261"></span><span>
</span><span id="line-262"></span><span class="hs-comment">-- -----------------------------------------------------------------------------</span><span>
</span><span id="line-263"></span><span class="hs-comment">--  Unconditional branches</span><span>
</span><span id="line-264"></span><span>
</span><span id="line-265"></span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.html#genBranch"><span class="hs-identifier hs-type">genBranch</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Cmm.BlockId.html#BlockId"><span class="hs-identifier hs-type">BlockId</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.Monad.html#NatM"><span class="hs-identifier hs-type">NatM</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#InstrBlock"><span class="hs-identifier hs-type">InstrBlock</span></a></span><span>
</span><span id="line-266"></span><span id="genBranch"><span class="annot"><span class="annottext">genBranch :: Label -&gt; NatM InstrBlock
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.html#genBranch"><span class="hs-identifier hs-var hs-var">genBranch</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">InstrBlock -&gt; NatM InstrBlock
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="annot"><span class="annottext">(InstrBlock -&gt; NatM InstrBlock)
-&gt; (Label -&gt; InstrBlock) -&gt; Label -&gt; NatM InstrBlock
forall b c a. (b -&gt; c) -&gt; (a -&gt; b) -&gt; a -&gt; c
</span><a href="../../base/src/GHC.Base.html#."><span class="hs-operator hs-var">.</span></a></span><span> </span><span class="annot"><span class="annottext">[Instr] -&gt; InstrBlock
forall a. [a] -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#toOL"><span class="hs-identifier hs-var">toOL</span></a></span><span> </span><span class="annot"><span class="annottext">([Instr] -&gt; InstrBlock)
-&gt; (Label -&gt; [Instr]) -&gt; Label -&gt; InstrBlock
forall b c a. (b -&gt; c) -&gt; (a -&gt; b) -&gt; a -&gt; c
</span><a href="../../base/src/GHC.Base.html#."><span class="hs-operator hs-var">.</span></a></span><span> </span><span class="annot"><span class="annottext">Label -&gt; [Instr]
forall instr. Instruction instr =&gt; Label -&gt; [instr]
</span><a href="GHC.CmmToAsm.Instr.html#mkJumpInstr"><span class="hs-identifier hs-var">mkJumpInstr</span></a></span><span>
</span><span id="line-267"></span><span>
</span><span id="line-268"></span><span>
</span><span id="line-269"></span><span class="hs-comment">-- -----------------------------------------------------------------------------</span><span>
</span><span id="line-270"></span><span class="hs-comment">--  Conditional jumps</span><span>
</span><span id="line-271"></span><span>
</span><span id="line-272"></span><span class="hs-comment">{-
Conditional jumps are always to local labels, so we can use branch
instructions.  We peek at the arguments to decide what kind of
comparison to do.

SPARC: First, we have to ensure that the condition codes are set
according to the supplied comparison operation.  We generate slightly
different code for floating point comparisons, because a floating
point operation cannot directly precede a @BF@.  We assume the worst
and fill that slot with a @NOP@.

SPARC: Do not fill the delay slots here; you will confuse the register
allocator.
-}</span><span>
</span><span id="line-286"></span><span>
</span><span id="line-287"></span><span>
</span><span id="line-288"></span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.html#genCondJump"><span class="hs-identifier hs-type">genCondJump</span></a></span><span>
</span><span id="line-289"></span><span>    </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Cmm.BlockId.html#BlockId"><span class="hs-identifier hs-type">BlockId</span></a></span><span>      </span><span class="hs-comment">-- the branch target</span><span>
</span><span id="line-290"></span><span>    </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmExpr"><span class="hs-identifier hs-type">CmmExpr</span></a></span><span>      </span><span class="hs-comment">-- the condition on which to branch</span><span>
</span><span id="line-291"></span><span>    </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.Monad.html#NatM"><span class="hs-identifier hs-type">NatM</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#InstrBlock"><span class="hs-identifier hs-type">InstrBlock</span></a></span><span>
</span><span id="line-292"></span><span>
</span><span id="line-293"></span><span>
</span><span id="line-294"></span><span>
</span><span id="line-295"></span><span id="genCondJump"><span class="annot"><span class="annottext">genCondJump :: Label -&gt; CmmExpr -&gt; NatM InstrBlock
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.html#genCondJump"><span class="hs-identifier hs-var hs-var">genCondJump</span></a></span></span><span> </span><span id="local-6989586621681038602"><span class="annot"><span class="annottext">Label
</span><a href="#local-6989586621681038602"><span class="hs-identifier hs-var">bid</span></a></span></span><span> </span><span id="local-6989586621681038601"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681038601"><span class="hs-identifier hs-var">bool</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-296"></span><span>  </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#CondCode"><span class="hs-identifier hs-type">CondCode</span></a></span><span> </span><span id="local-6989586621681038599"><span class="annot"><span class="annottext">Bool
</span><a href="#local-6989586621681038599"><span class="hs-identifier hs-var">is_float</span></a></span></span><span> </span><span id="local-6989586621681038598"><span class="annot"><span class="annottext">Cond
</span><a href="#local-6989586621681038598"><span class="hs-identifier hs-var">cond</span></a></span></span><span> </span><span id="local-6989586621681038597"><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681038597"><span class="hs-identifier hs-var">code</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">CmmExpr -&gt; NatM CondCode
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.CondCode.html#getCondCode"><span class="hs-identifier hs-var">getCondCode</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681038601"><span class="hs-identifier hs-var">bool</span></a></span><span>
</span><span id="line-297"></span><span>  </span><span class="annot"><span class="annottext">InstrBlock -&gt; NatM InstrBlock
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="hs-special">(</span><span>
</span><span id="line-298"></span><span>       </span><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681038597"><span class="hs-identifier hs-var">code</span></a></span><span> </span><span class="annot"><span class="annottext">InstrBlock -&gt; InstrBlock -&gt; InstrBlock
forall a. OrdList a -&gt; OrdList a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#appOL"><span class="hs-operator hs-var">`appOL`</span></a></span><span>
</span><span id="line-299"></span><span>       </span><span class="annot"><span class="annottext">[Instr] -&gt; InstrBlock
forall a. [a] -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#toOL"><span class="hs-identifier hs-var">toOL</span></a></span><span> </span><span class="hs-special">(</span><span>
</span><span id="line-300"></span><span>         </span><span class="hs-keyword">if</span><span>   </span><span class="annot"><span class="annottext">Bool
</span><a href="#local-6989586621681038599"><span class="hs-identifier hs-var">is_float</span></a></span><span>
</span><span id="line-301"></span><span>         </span><span class="hs-keyword">then</span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#NOP"><span class="hs-identifier hs-var">NOP</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Cond -&gt; Bool -&gt; Label -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#BF"><span class="hs-identifier hs-var">BF</span></a></span><span> </span><span class="annot"><span class="annottext">Cond
</span><a href="#local-6989586621681038598"><span class="hs-identifier hs-var">cond</span></a></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span> </span><span class="annot"><span class="annottext">Label
</span><a href="#local-6989586621681038602"><span class="hs-identifier hs-var">bid</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#NOP"><span class="hs-identifier hs-var">NOP</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-302"></span><span>         </span><span class="hs-keyword">else</span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">Cond -&gt; Bool -&gt; Label -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#BI"><span class="hs-identifier hs-var">BI</span></a></span><span> </span><span class="annot"><span class="annottext">Cond
</span><a href="#local-6989586621681038598"><span class="hs-identifier hs-var">cond</span></a></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span> </span><span class="annot"><span class="annottext">Label
</span><a href="#local-6989586621681038602"><span class="hs-identifier hs-var">bid</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#NOP"><span class="hs-identifier hs-var">NOP</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-303"></span><span>       </span><span class="hs-special">)</span><span>
</span><span id="line-304"></span><span>    </span><span class="hs-special">)</span><span>
</span><span id="line-305"></span><span>
</span><span id="line-306"></span><span>
</span><span id="line-307"></span><span>
</span><span id="line-308"></span><span class="hs-comment">-- -----------------------------------------------------------------------------</span><span>
</span><span id="line-309"></span><span class="hs-comment">-- Generating a table-branch</span><span>
</span><span id="line-310"></span><span>
</span><span id="line-311"></span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.html#genSwitch"><span class="hs-identifier hs-type">genSwitch</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.Config.html#NCGConfig"><span class="hs-identifier hs-type">NCGConfig</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmExpr"><span class="hs-identifier hs-type">CmmExpr</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Switch.html#SwitchTargets"><span class="hs-identifier hs-type">SwitchTargets</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.Monad.html#NatM"><span class="hs-identifier hs-type">NatM</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#InstrBlock"><span class="hs-identifier hs-type">InstrBlock</span></a></span><span>
</span><span id="line-312"></span><span id="genSwitch"><span class="annot"><span class="annottext">genSwitch :: NCGConfig -&gt; CmmExpr -&gt; SwitchTargets -&gt; NatM InstrBlock
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.html#genSwitch"><span class="hs-identifier hs-var hs-var">genSwitch</span></a></span></span><span> </span><span id="local-6989586621681038593"><span class="annot"><span class="annottext">NCGConfig
</span><a href="#local-6989586621681038593"><span class="hs-identifier hs-var">config</span></a></span></span><span> </span><span id="local-6989586621681038592"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681038592"><span class="hs-identifier hs-var">expr</span></a></span></span><span> </span><span id="local-6989586621681038591"><span class="annot"><span class="annottext">SwitchTargets
</span><a href="#local-6989586621681038591"><span class="hs-identifier hs-var">targets</span></a></span></span><span>
</span><span id="line-313"></span><span>        </span><span class="hs-glyph">|</span><span> </span><span class="annot"><span class="annottext">NCGConfig -&gt; Bool
</span><a href="GHC.CmmToAsm.Config.html#ncgPIC"><span class="hs-identifier hs-var hs-var">ncgPIC</span></a></span><span> </span><span class="annot"><span class="annottext">NCGConfig
</span><a href="#local-6989586621681038593"><span class="hs-identifier hs-var">config</span></a></span><span>
</span><span id="line-314"></span><span>        </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">String -&gt; NatM InstrBlock
forall a. HasCallStack =&gt; String -&gt; a
</span><a href="../../base/src/GHC.Err.html#error"><span class="hs-identifier hs-var">error</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;MachCodeGen: sparc genSwitch PIC not finished\n&quot;</span></span><span>
</span><span id="line-315"></span><span>
</span><span id="line-316"></span><span>        </span><span class="hs-glyph">|</span><span> </span><span class="annot"><span class="annottext">Bool
</span><a href="../../base/src/GHC.Base.html#otherwise"><span class="hs-identifier hs-var">otherwise</span></a></span><span>
</span><span id="line-317"></span><span>        </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>    </span><span class="hs-special">(</span><span id="local-6989586621681038588"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681038588"><span class="hs-identifier hs-var">e_reg</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681038587"><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681038587"><span class="hs-identifier hs-var">e_code</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">CmmExpr -&gt; NatM (Reg, InstrBlock)
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#getSomeReg"><span class="hs-identifier hs-var">getSomeReg</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Platform -&gt; CmmExpr -&gt; Int -&gt; CmmExpr
</span><a href="GHC.Cmm.Utils.html#cmmOffset"><span class="hs-identifier hs-var">cmmOffset</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">NCGConfig -&gt; Platform
</span><a href="GHC.CmmToAsm.Config.html#ncgPlatform"><span class="hs-identifier hs-var hs-var">ncgPlatform</span></a></span><span> </span><span class="annot"><span class="annottext">NCGConfig
</span><a href="#local-6989586621681038593"><span class="hs-identifier hs-var">config</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681038592"><span class="hs-identifier hs-var">expr</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681038584"><span class="hs-identifier hs-var">offset</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-318"></span><span>
</span><span id="line-319"></span><span>                </span><span id="local-6989586621681038583"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681038583"><span class="hs-identifier hs-var">base_reg</span></a></span></span><span>        </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">Format -&gt; NatM Reg
</span><a href="GHC.CmmToAsm.Monad.html#getNewRegNat"><span class="hs-identifier hs-var">getNewRegNat</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#II32"><span class="hs-identifier hs-var">II32</span></a></span><span>
</span><span id="line-320"></span><span>                </span><span id="local-6989586621681038581"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681038581"><span class="hs-identifier hs-var">offset_reg</span></a></span></span><span>      </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">Format -&gt; NatM Reg
</span><a href="GHC.CmmToAsm.Monad.html#getNewRegNat"><span class="hs-identifier hs-var">getNewRegNat</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#II32"><span class="hs-identifier hs-var">II32</span></a></span><span>
</span><span id="line-321"></span><span>                </span><span id="local-6989586621681038580"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681038580"><span class="hs-identifier hs-var">dst</span></a></span></span><span>             </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">Format -&gt; NatM Reg
</span><a href="GHC.CmmToAsm.Monad.html#getNewRegNat"><span class="hs-identifier hs-var">getNewRegNat</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#II32"><span class="hs-identifier hs-var">II32</span></a></span><span>
</span><span id="line-322"></span><span>
</span><span id="line-323"></span><span>                </span><span id="local-6989586621681038579"><span class="annot"><span class="annottext">CLabel
</span><a href="#local-6989586621681038579"><span class="hs-keyword hs-var">label</span></a></span></span><span>           </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">NatM CLabel
</span><a href="GHC.CmmToAsm.Monad.html#getNewLabelNat"><span class="hs-identifier hs-var">getNewLabelNat</span></a></span><span>
</span><span id="line-324"></span><span>
</span><span id="line-325"></span><span>                </span><span class="annot"><span class="annottext">InstrBlock -&gt; NatM InstrBlock
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="annot"><span class="annottext">(InstrBlock -&gt; NatM InstrBlock) -&gt; InstrBlock -&gt; NatM InstrBlock
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681038587"><span class="hs-identifier hs-var">e_code</span></a></span><span> </span><span class="annot"><span class="annottext">InstrBlock -&gt; InstrBlock -&gt; InstrBlock
forall a. OrdList a -&gt; OrdList a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#appOL"><span class="hs-operator hs-var">`appOL`</span></a></span><span>
</span><span id="line-326"></span><span>                 </span><span class="annot"><span class="annottext">[Instr] -&gt; InstrBlock
forall a. [a] -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#toOL"><span class="hs-identifier hs-var">toOL</span></a></span><span>
</span><span id="line-327"></span><span>                        </span><span class="hs-special">[</span><span> </span><span class="hs-comment">-- load base of jump table</span><span>
</span><span id="line-328"></span><span>                          </span><span class="annot"><span class="annottext">Imm -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#SETHI"><span class="hs-identifier hs-var">SETHI</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Imm -&gt; Imm
</span><a href="GHC.CmmToAsm.SPARC.Imm.html#HI"><span class="hs-identifier hs-var">HI</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">CLabel -&gt; Imm
</span><a href="GHC.CmmToAsm.SPARC.Imm.html#ImmCLbl"><span class="hs-identifier hs-var">ImmCLbl</span></a></span><span> </span><span class="annot"><span class="annottext">CLabel
</span><a href="#local-6989586621681038579"><span class="hs-keyword hs-var">label</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681038583"><span class="hs-identifier hs-var">base_reg</span></a></span><span>
</span><span id="line-329"></span><span>                        </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Bool -&gt; Reg -&gt; RI -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#OR"><span class="hs-identifier hs-var">OR</span></a></span><span>    </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681038583"><span class="hs-identifier hs-var">base_reg</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Imm -&gt; RI
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#RIImm"><span class="hs-identifier hs-var">RIImm</span></a></span><span> </span><span class="annot"><span class="annottext">(Imm -&gt; RI) -&gt; Imm -&gt; RI
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">Imm -&gt; Imm
</span><a href="GHC.CmmToAsm.SPARC.Imm.html#LO"><span class="hs-identifier hs-var">LO</span></a></span><span> </span><span class="annot"><span class="annottext">(Imm -&gt; Imm) -&gt; Imm -&gt; Imm
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">CLabel -&gt; Imm
</span><a href="GHC.CmmToAsm.SPARC.Imm.html#ImmCLbl"><span class="hs-identifier hs-var">ImmCLbl</span></a></span><span> </span><span class="annot"><span class="annottext">CLabel
</span><a href="#local-6989586621681038579"><span class="hs-keyword hs-var">label</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681038583"><span class="hs-identifier hs-var">base_reg</span></a></span><span>
</span><span id="line-330"></span><span>
</span><span id="line-331"></span><span>                        </span><span class="hs-comment">-- the addrs in the table are 32 bits wide..</span><span>
</span><span id="line-332"></span><span>                        </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Reg -&gt; RI -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#SLL"><span class="hs-identifier hs-var">SLL</span></a></span><span>   </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681038588"><span class="hs-identifier hs-var">e_reg</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Imm -&gt; RI
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#RIImm"><span class="hs-identifier hs-var">RIImm</span></a></span><span> </span><span class="annot"><span class="annottext">(Imm -&gt; RI) -&gt; Imm -&gt; RI
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">Int -&gt; Imm
</span><a href="GHC.CmmToAsm.SPARC.Imm.html#ImmInt"><span class="hs-identifier hs-var">ImmInt</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">2</span></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681038581"><span class="hs-identifier hs-var">offset_reg</span></a></span><span>
</span><span id="line-333"></span><span>
</span><span id="line-334"></span><span>                        </span><span class="hs-comment">-- load and jump to the destination</span><span>
</span><span id="line-335"></span><span>                        </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Format -&gt; AddrMode -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#LD"><span class="hs-identifier hs-var">LD</span></a></span><span>      </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#II32"><span class="hs-identifier hs-var">II32</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; Reg -&gt; AddrMode
</span><a href="GHC.CmmToAsm.SPARC.AddrMode.html#AddrRegReg"><span class="hs-identifier hs-var">AddrRegReg</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681038583"><span class="hs-identifier hs-var">base_reg</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681038581"><span class="hs-identifier hs-var">offset_reg</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681038580"><span class="hs-identifier hs-var">dst</span></a></span><span>
</span><span id="line-336"></span><span>                        </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">AddrMode -&gt; [Maybe Label] -&gt; CLabel -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#JMP_TBL"><span class="hs-identifier hs-var">JMP_TBL</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; Imm -&gt; AddrMode
</span><a href="GHC.CmmToAsm.SPARC.AddrMode.html#AddrRegImm"><span class="hs-identifier hs-var">AddrRegImm</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681038580"><span class="hs-identifier hs-var">dst</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Int -&gt; Imm
</span><a href="GHC.CmmToAsm.SPARC.Imm.html#ImmInt"><span class="hs-identifier hs-var">ImmInt</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">0</span></span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">[Maybe Label]
</span><a href="#local-6989586621681038569"><span class="hs-identifier hs-var">ids</span></a></span><span> </span><span class="annot"><span class="annottext">CLabel
</span><a href="#local-6989586621681038579"><span class="hs-keyword hs-var">label</span></a></span><span>
</span><span id="line-337"></span><span>                        </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#NOP"><span class="hs-identifier hs-var">NOP</span></a></span><span> </span><span class="hs-special">]</span><span>
</span><span id="line-338"></span><span>  </span><span class="hs-keyword">where</span><span> </span><span class="hs-special">(</span><span id="local-6989586621681038584"><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681038584"><span class="hs-identifier hs-var">offset</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681038569"><span class="annot"><span class="annottext">[Maybe Label]
</span><a href="#local-6989586621681038569"><span class="hs-identifier hs-var">ids</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">SwitchTargets -&gt; (Int, [Maybe Label])
</span><a href="GHC.Cmm.Switch.html#switchTargetsToTable"><span class="hs-identifier hs-var">switchTargetsToTable</span></a></span><span> </span><span class="annot"><span class="annottext">SwitchTargets
</span><a href="#local-6989586621681038591"><span class="hs-identifier hs-var">targets</span></a></span><span>
</span><span id="line-339"></span><span>
</span><span id="line-340"></span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.html#generateJumpTableForInstr"><span class="hs-identifier hs-type">generateJumpTableForInstr</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="../../ghc-boot/src/GHC.Platform.html#Platform"><span class="hs-identifier hs-type">Platform</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.Instr.html#Instr"><span class="hs-identifier hs-type">Instr</span></a></span><span>
</span><span id="line-341"></span><span>                          </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="../../base/src/GHC.Maybe.html#Maybe"><span class="hs-identifier hs-type">Maybe</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.CmmToAsm.Instr.html#NatCmmDecl"><span class="hs-identifier hs-type">NatCmmDecl</span></a></span><span> </span><span class="annot"><a href="GHC.Cmm.html#RawCmmStatics"><span class="hs-identifier hs-type">RawCmmStatics</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.Instr.html#Instr"><span class="hs-identifier hs-type">Instr</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-342"></span><span id="generateJumpTableForInstr"><span class="annot"><span class="annottext">generateJumpTableForInstr :: Platform -&gt; Instr -&gt; Maybe (NatCmmDecl RawCmmStatics Instr)
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.html#generateJumpTableForInstr"><span class="hs-identifier hs-var hs-var">generateJumpTableForInstr</span></a></span></span><span> </span><span id="local-6989586621681038567"><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681038567"><span class="hs-identifier hs-var">platform</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.CmmToAsm.SPARC.Instr.html#JMP_TBL"><span class="hs-identifier hs-type">JMP_TBL</span></a></span><span> </span><span class="annot"><span class="annottext">AddrMode
</span><span class="hs-identifier">_</span></span><span> </span><span id="local-6989586621681038566"><span class="annot"><span class="annottext">[Maybe Label]
</span><a href="#local-6989586621681038566"><span class="hs-identifier hs-var">ids</span></a></span></span><span> </span><span id="local-6989586621681038565"><span class="annot"><span class="annottext">CLabel
</span><a href="#local-6989586621681038565"><span class="hs-keyword hs-var">label</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span>
</span><span id="line-343"></span><span>  </span><span class="hs-keyword">let</span><span> </span><span id="local-6989586621681038564"><span class="annot"><span class="annottext">jumpTable :: [CmmStatic]
</span><a href="#local-6989586621681038564"><span class="hs-identifier hs-var hs-var">jumpTable</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">(Maybe Label -&gt; CmmStatic) -&gt; [Maybe Label] -&gt; [CmmStatic]
forall a b. (a -&gt; b) -&gt; [a] -&gt; [b]
</span><a href="../../base/src/GHC.Base.html#map"><span class="hs-identifier hs-var">map</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Platform -&gt; Maybe Label -&gt; CmmStatic
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.html#jumpTableEntry"><span class="hs-identifier hs-var">jumpTableEntry</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681038567"><span class="hs-identifier hs-var">platform</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">[Maybe Label]
</span><a href="#local-6989586621681038566"><span class="hs-identifier hs-var">ids</span></a></span><span>
</span><span id="line-344"></span><span>  </span><span class="hs-keyword">in</span><span> </span><span class="annot"><span class="annottext">NatCmmDecl RawCmmStatics Instr
-&gt; Maybe (NatCmmDecl RawCmmStatics Instr)
forall a. a -&gt; Maybe a
</span><a href="../../base/src/GHC.Maybe.html#Just"><span class="hs-identifier hs-var">Just</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Section -&gt; RawCmmStatics -&gt; NatCmmDecl RawCmmStatics Instr
forall d h g. Section -&gt; d -&gt; GenCmmDecl d h g
</span><a href="GHC.Cmm.html#CmmData"><span class="hs-identifier hs-var">CmmData</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">SectionType -&gt; CLabel -&gt; Section
</span><a href="GHC.Cmm.html#Section"><span class="hs-identifier hs-var">Section</span></a></span><span> </span><span class="annot"><span class="annottext">SectionType
</span><a href="GHC.Cmm.html#ReadOnlyData"><span class="hs-identifier hs-var">ReadOnlyData</span></a></span><span> </span><span class="annot"><span class="annottext">CLabel
</span><a href="#local-6989586621681038565"><span class="hs-keyword hs-var">label</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">CLabel -&gt; [CmmStatic] -&gt; RawCmmStatics
forall (rawOnly :: Bool).
CLabel -&gt; [CmmStatic] -&gt; GenCmmStatics rawOnly
</span><a href="GHC.Cmm.html#CmmStaticsRaw"><span class="hs-identifier hs-var">CmmStaticsRaw</span></a></span><span> </span><span class="annot"><span class="annottext">CLabel
</span><a href="#local-6989586621681038565"><span class="hs-keyword hs-var">label</span></a></span><span> </span><span class="annot"><span class="annottext">[CmmStatic]
</span><a href="#local-6989586621681038564"><span class="hs-identifier hs-var">jumpTable</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><span id="line-345"></span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.html#generateJumpTableForInstr"><span class="hs-identifier hs-var">generateJumpTableForInstr</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><span class="hs-identifier">_</span></span><span> </span><span class="annot"><span class="annottext">Instr
</span><span class="hs-identifier">_</span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Maybe (NatCmmDecl RawCmmStatics Instr)
forall a. Maybe a
</span><a href="../../base/src/GHC.Maybe.html#Nothing"><span class="hs-identifier hs-var">Nothing</span></a></span><span>
</span><span id="line-346"></span><span>
</span><span id="line-347"></span><span>
</span><span id="line-348"></span><span>
</span><span id="line-349"></span><span class="hs-comment">-- -----------------------------------------------------------------------------</span><span>
</span><span id="line-350"></span><span class="hs-comment">-- Generating C calls</span><span>
</span><span id="line-351"></span><span>
</span><span id="line-352"></span><span class="hs-comment">{-
   Now the biggest nightmare---calls.  Most of the nastiness is buried in
   @get_arg@, which moves the arguments to the correct registers/stack
   locations.  Apart from that, the code is easy.

   The SPARC calling convention is an absolute
   nightmare.  The first 6x32 bits of arguments are mapped into
   %o0 through %o5, and the remaining arguments are dumped to the
   stack, beginning at [%sp+92].  (Note that %o6 == %sp.)

   If we have to put args on the stack, move %o6==%sp down by
   the number of words to go on the stack, to ensure there's enough space.

   According to Fraser and Hanson's lcc book, page 478, fig 17.2,
   16 words above the stack pointer is a word for the address of
   a structure return value.  I use this as a temporary location
   for moving values from float to int regs.  Certainly it isn't
   safe to put anything in the 16 words starting at %sp, since
   this area can get trashed at any time due to window overflows
   caused by signal handlers.

   A final complication (if the above isn't enough) is that
   we can't blithely calculate the arguments one by one into
   %o0 .. %o5.  Consider the following nested calls:

       fff a (fff b c)

   Naive code moves a into %o0, and (fff b c) into %o1.  Unfortunately
   the inner call will itself use %o0, which trashes the value put there
   in preparation for the outer call.  Upshot: we need to calculate the
   args into temporary regs, and move those to arg regs or onto the
   stack only immediately prior to the call proper.  Sigh.
-}</span><span>
</span><span id="line-385"></span><span>
</span><span id="line-386"></span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.html#genCCall"><span class="hs-identifier hs-type">genCCall</span></a></span><span>
</span><span id="line-387"></span><span>    </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Cmm.Node.html#ForeignTarget"><span class="hs-identifier hs-type">ForeignTarget</span></a></span><span>            </span><span class="hs-comment">-- function to call</span><span>
</span><span id="line-388"></span><span>    </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Cmm.Node.html#CmmFormal"><span class="hs-identifier hs-type">CmmFormal</span></a></span><span class="hs-special">]</span><span>        </span><span class="hs-comment">-- where to put the result</span><span>
</span><span id="line-389"></span><span>    </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Cmm.Node.html#CmmActual"><span class="hs-identifier hs-type">CmmActual</span></a></span><span class="hs-special">]</span><span>        </span><span class="hs-comment">-- arguments (of mixed type)</span><span>
</span><span id="line-390"></span><span>    </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.Monad.html#NatM"><span class="hs-identifier hs-type">NatM</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#InstrBlock"><span class="hs-identifier hs-type">InstrBlock</span></a></span><span>
</span><span id="line-391"></span><span>
</span><span id="line-392"></span><span>
</span><span id="line-393"></span><span>
</span><span id="line-394"></span><span class="hs-comment">-- On SPARC under TSO (Total Store Ordering), writes earlier in the instruction stream</span><span>
</span><span id="line-395"></span><span class="hs-comment">-- are guaranteed to take place before writes afterwards (unlike on PowerPC).</span><span>
</span><span id="line-396"></span><span class="hs-comment">-- Ref: Section 8.4 of the SPARC V9 Architecture manual.</span><span>
</span><span id="line-397"></span><span class="hs-comment">--</span><span>
</span><span id="line-398"></span><span class="hs-comment">-- In the SPARC case we don't need a barrier.</span><span>
</span><span id="line-399"></span><span class="hs-comment">--</span><span>
</span><span id="line-400"></span><span id="genCCall"><span class="annot"><span class="annottext">genCCall :: ForeignTarget -&gt; [CmmFormal] -&gt; [CmmExpr] -&gt; NatM InstrBlock
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.html#genCCall"><span class="hs-identifier hs-var hs-var">genCCall</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.Node.html#PrimTarget"><span class="hs-identifier hs-type">PrimTarget</span></a></span><span> </span><span class="annot"><span class="annottext">CallishMachOp
</span><a href="GHC.Cmm.MachOp.html#MO_ReadBarrier"><span class="hs-identifier hs-var">MO_ReadBarrier</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">[CmmFormal]
</span><span class="hs-identifier">_</span></span><span> </span><span class="annot"><span class="annottext">[CmmExpr]
</span><span class="hs-identifier">_</span></span><span>
</span><span id="line-401"></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">InstrBlock -&gt; NatM InstrBlock
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="annot"><span class="annottext">(InstrBlock -&gt; NatM InstrBlock) -&gt; InstrBlock -&gt; NatM InstrBlock
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">InstrBlock
forall a. OrdList a
</span><a href="GHC.Data.OrdList.html#nilOL"><span class="hs-identifier hs-var">nilOL</span></a></span><span>
</span><span id="line-402"></span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.html#genCCall"><span class="hs-identifier hs-var">genCCall</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.Node.html#PrimTarget"><span class="hs-identifier hs-type">PrimTarget</span></a></span><span> </span><span class="annot"><span class="annottext">CallishMachOp
</span><a href="GHC.Cmm.MachOp.html#MO_WriteBarrier"><span class="hs-identifier hs-var">MO_WriteBarrier</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">[CmmFormal]
</span><span class="hs-identifier">_</span></span><span> </span><span class="annot"><span class="annottext">[CmmExpr]
</span><span class="hs-identifier">_</span></span><span>
</span><span id="line-403"></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">InstrBlock -&gt; NatM InstrBlock
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="annot"><span class="annottext">(InstrBlock -&gt; NatM InstrBlock) -&gt; InstrBlock -&gt; NatM InstrBlock
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">InstrBlock
forall a. OrdList a
</span><a href="GHC.Data.OrdList.html#nilOL"><span class="hs-identifier hs-var">nilOL</span></a></span><span>
</span><span id="line-404"></span><span>
</span><span id="line-405"></span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.html#genCCall"><span class="hs-identifier hs-var">genCCall</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.Node.html#PrimTarget"><span class="hs-identifier hs-type">PrimTarget</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_Prefetch_Data"><span class="hs-identifier hs-type">MO_Prefetch_Data</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-identifier">_</span></span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">[CmmFormal]
</span><span class="hs-identifier">_</span></span><span> </span><span class="annot"><span class="annottext">[CmmExpr]
</span><span class="hs-identifier">_</span></span><span>
</span><span id="line-406"></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">InstrBlock -&gt; NatM InstrBlock
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="annot"><span class="annottext">(InstrBlock -&gt; NatM InstrBlock) -&gt; InstrBlock -&gt; NatM InstrBlock
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">InstrBlock
forall a. OrdList a
</span><a href="GHC.Data.OrdList.html#nilOL"><span class="hs-identifier hs-var">nilOL</span></a></span><span>
</span><span id="line-407"></span><span>
</span><span id="line-408"></span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.html#genCCall"><span class="hs-identifier hs-var">genCCall</span></a></span><span> </span><span id="local-6989586621681038555"><span class="annot"><span class="annottext">ForeignTarget
</span><a href="#local-6989586621681038555"><span class="hs-identifier hs-var">target</span></a></span></span><span> </span><span id="local-6989586621681038554"><span class="annot"><span class="annottext">[CmmFormal]
</span><a href="#local-6989586621681038554"><span class="hs-identifier hs-var">dest_regs</span></a></span></span><span> </span><span id="local-6989586621681038553"><span class="annot"><span class="annottext">[CmmExpr]
</span><a href="#local-6989586621681038553"><span class="hs-identifier hs-var">args</span></a></span></span><span>
</span><span id="line-409"></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>   </span><span class="hs-comment">-- work out the arguments, and assign them to integer regs</span><span>
</span><span id="line-410"></span><span>        </span><span id="local-6989586621681038552"><span class="annot"><span class="annottext">[(InstrBlock, [Reg])]
</span><a href="#local-6989586621681038552"><span class="hs-identifier hs-var">argcode_and_vregs</span></a></span></span><span>       </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">(CmmExpr -&gt; NatM (InstrBlock, [Reg]))
-&gt; [CmmExpr] -&gt; NatM [(InstrBlock, [Reg])]
forall (t :: * -&gt; *) (m :: * -&gt; *) a b.
(Traversable t, Monad m) =&gt;
(a -&gt; m b) -&gt; t a -&gt; m (t b)
</span><a href="../../base/src/Data.Traversable.html#mapM"><span class="hs-identifier hs-var">mapM</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr -&gt; NatM (InstrBlock, [Reg])
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.html#arg_to_int_vregs"><span class="hs-identifier hs-var">arg_to_int_vregs</span></a></span><span> </span><span class="annot"><span class="annottext">[CmmExpr]
</span><a href="#local-6989586621681038553"><span class="hs-identifier hs-var">args</span></a></span><span>
</span><span id="line-411"></span><span>        </span><span class="hs-keyword">let</span><span> </span><span class="hs-special">(</span><span id="local-6989586621681038550"><span class="annot"><span class="annottext">[InstrBlock]
</span><a href="#local-6989586621681038550"><span class="hs-identifier hs-var">argcodes</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681038549"><span class="annot"><span class="annottext">[[Reg]]
</span><a href="#local-6989586621681038549"><span class="hs-identifier hs-var">vregss</span></a></span></span><span class="hs-special">)</span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">[(InstrBlock, [Reg])] -&gt; ([InstrBlock], [[Reg]])
forall a b. [(a, b)] -&gt; ([a], [b])
</span><a href="../../base/src/GHC.List.html#unzip"><span class="hs-identifier hs-var">unzip</span></a></span><span> </span><span class="annot"><span class="annottext">[(InstrBlock, [Reg])]
</span><a href="#local-6989586621681038552"><span class="hs-identifier hs-var">argcode_and_vregs</span></a></span><span>
</span><span id="line-412"></span><span>        </span><span class="hs-keyword">let</span><span> </span><span id="local-6989586621681038547"><span class="annot"><span class="annottext">vregs :: [Reg]
</span><a href="#local-6989586621681038547"><span class="hs-identifier hs-var hs-var">vregs</span></a></span></span><span>               </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">[[Reg]] -&gt; [Reg]
forall (t :: * -&gt; *) a. Foldable t =&gt; t [a] -&gt; [a]
</span><a href="../../base/src/Data.Foldable.html#concat"><span class="hs-identifier hs-var">concat</span></a></span><span> </span><span class="annot"><span class="annottext">[[Reg]]
</span><a href="#local-6989586621681038549"><span class="hs-identifier hs-var">vregss</span></a></span><span>
</span><span id="line-413"></span><span>
</span><span id="line-414"></span><span>        </span><span class="hs-keyword">let</span><span> </span><span id="local-6989586621681038545"><span class="annot"><span class="annottext">n_argRegs :: Int
</span><a href="#local-6989586621681038545"><span class="hs-identifier hs-var hs-var">n_argRegs</span></a></span></span><span>           </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">[Reg] -&gt; Int
forall (t :: * -&gt; *) a. Foldable t =&gt; t a -&gt; Int
</span><a href="../../base/src/Data.Foldable.html#length"><span class="hs-identifier hs-var">length</span></a></span><span> </span><span class="annot"><span class="annottext">[Reg]
</span><a href="GHC.CmmToAsm.SPARC.Regs.html#allArgRegs"><span class="hs-identifier hs-var">allArgRegs</span></a></span><span>
</span><span id="line-415"></span><span>        </span><span class="hs-keyword">let</span><span> </span><span id="local-6989586621681038542"><span class="annot"><span class="annottext">n_argRegs_used :: Int
</span><a href="#local-6989586621681038542"><span class="hs-identifier hs-var hs-var">n_argRegs_used</span></a></span></span><span>      </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Int -&gt; Int -&gt; Int
forall a. Ord a =&gt; a -&gt; a -&gt; a
</span><span class="hs-identifier hs-var">min</span></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">[Reg] -&gt; Int
forall (t :: * -&gt; *) a. Foldable t =&gt; t a -&gt; Int
</span><a href="../../base/src/Data.Foldable.html#length"><span class="hs-identifier hs-var">length</span></a></span><span> </span><span class="annot"><span class="annottext">[Reg]
</span><a href="#local-6989586621681038547"><span class="hs-identifier hs-var">vregs</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681038545"><span class="hs-identifier hs-var">n_argRegs</span></a></span><span>
</span><span id="line-416"></span><span>
</span><span id="line-417"></span><span>
</span><span id="line-418"></span><span>        </span><span class="hs-comment">-- deal with static vs dynamic call targets</span><span>
</span><span id="line-419"></span><span>        </span><span id="local-6989586621681038540"><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681038540"><span class="hs-identifier hs-var">callinsns</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="hs-keyword">case</span><span> </span><span class="annot"><span class="annottext">ForeignTarget
</span><a href="#local-6989586621681038555"><span class="hs-identifier hs-var">target</span></a></span><span> </span><span class="hs-keyword">of</span><span>
</span><span id="line-420"></span><span>                </span><span class="annot"><a href="GHC.Cmm.Node.html#ForeignTarget"><span class="hs-identifier hs-type">ForeignTarget</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmLit"><span class="hs-identifier hs-type">CmmLit</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmLabel"><span class="hs-identifier hs-type">CmmLabel</span></a></span><span> </span><span id="local-6989586621681038538"><span class="annot"><span class="annottext">CLabel
</span><a href="#local-6989586621681038538"><span class="hs-identifier hs-var">lbl</span></a></span></span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">ForeignConvention
</span><span class="hs-identifier">_</span></span><span> </span><span class="hs-glyph">-&gt;</span><span>
</span><span id="line-421"></span><span>                        </span><span class="annot"><span class="annottext">InstrBlock -&gt; NatM InstrBlock
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Instr -&gt; InstrBlock
forall a. a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#unitOL"><span class="hs-identifier hs-var">unitOL</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Either Imm Reg -&gt; Int -&gt; Bool -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#CALL"><span class="hs-identifier hs-var">CALL</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Imm -&gt; Either Imm Reg
forall a b. a -&gt; Either a b
</span><a href="../../base/src/Data.Either.html#Left"><span class="hs-identifier hs-var">Left</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">CmmLit -&gt; Imm
</span><a href="GHC.CmmToAsm.SPARC.Imm.html#litToImm"><span class="hs-identifier hs-var">litToImm</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">CLabel -&gt; CmmLit
</span><a href="GHC.Cmm.Expr.html#CmmLabel"><span class="hs-identifier hs-var">CmmLabel</span></a></span><span> </span><span class="annot"><span class="annottext">CLabel
</span><a href="#local-6989586621681038538"><span class="hs-identifier hs-var">lbl</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681038542"><span class="hs-identifier hs-var">n_argRegs_used</span></a></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><span id="line-422"></span><span>
</span><span id="line-423"></span><span>                </span><span class="annot"><a href="GHC.Cmm.Node.html#ForeignTarget"><span class="hs-identifier hs-type">ForeignTarget</span></a></span><span> </span><span id="local-6989586621681038536"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681038536"><span class="hs-identifier hs-var">expr</span></a></span></span><span> </span><span class="annot"><span class="annottext">ForeignConvention
</span><span class="hs-identifier">_</span></span><span>
</span><span id="line-424"></span><span>                 </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-keyword">do</span><span>  </span><span class="hs-special">(</span><span id="local-6989586621681038535"><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681038535"><span class="hs-identifier hs-var">dyn_c</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681038534"><span class="annot"><span class="annottext">[Reg]
</span><a href="#local-6989586621681038534"><span class="hs-identifier hs-var">dyn_rs</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">CmmExpr -&gt; NatM (InstrBlock, [Reg])
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.html#arg_to_int_vregs"><span class="hs-identifier hs-var">arg_to_int_vregs</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681038536"><span class="hs-identifier hs-var">expr</span></a></span><span>
</span><span id="line-425"></span><span>                        </span><span class="hs-keyword">let</span><span> </span><span id="local-6989586621681038533"><span class="annot"><span class="annottext">dyn_r :: Reg
</span><a href="#local-6989586621681038533"><span class="hs-identifier hs-var hs-var">dyn_r</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">case</span><span> </span><span class="annot"><span class="annottext">[Reg]
</span><a href="#local-6989586621681038534"><span class="hs-identifier hs-var">dyn_rs</span></a></span><span> </span><span class="hs-keyword">of</span><span>
</span><span id="line-426"></span><span>                                      </span><span class="hs-special">[</span><span id="local-6989586621681038532"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681038532"><span class="hs-identifier hs-var">dyn_r'</span></a></span></span><span class="hs-special">]</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681038532"><span class="hs-identifier hs-var">dyn_r'</span></a></span><span>
</span><span id="line-427"></span><span>                                      </span><span class="annot"><span class="annottext">[Reg]
</span><span class="hs-identifier">_</span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">String -&gt; Reg
forall a. String -&gt; a
</span><a href="GHC.Utils.Panic.Plain.html#panic"><span class="hs-identifier hs-var">panic</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;SPARC.CodeGen.genCCall: arg_to_int&quot;</span></span><span>
</span><span id="line-428"></span><span>                        </span><span class="annot"><span class="annottext">InstrBlock -&gt; NatM InstrBlock
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681038535"><span class="hs-identifier hs-var">dyn_c</span></a></span><span> </span><span class="annot"><span class="annottext">InstrBlock -&gt; Instr -&gt; InstrBlock
forall a. OrdList a -&gt; a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#snocOL"><span class="hs-operator hs-var">`snocOL`</span></a></span><span> </span><span class="annot"><span class="annottext">Either Imm Reg -&gt; Int -&gt; Bool -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#CALL"><span class="hs-identifier hs-var">CALL</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; Either Imm Reg
forall a b. b -&gt; Either a b
</span><a href="../../base/src/Data.Either.html#Right"><span class="hs-identifier hs-var">Right</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681038533"><span class="hs-identifier hs-var">dyn_r</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681038542"><span class="hs-identifier hs-var">n_argRegs_used</span></a></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span class="hs-special">)</span><span>
</span><span id="line-429"></span><span>
</span><span id="line-430"></span><span>                </span><span class="annot"><a href="GHC.Cmm.Node.html#PrimTarget"><span class="hs-identifier hs-type">PrimTarget</span></a></span><span> </span><span id="local-6989586621681038531"><span class="annot"><span class="annottext">CallishMachOp
</span><a href="#local-6989586621681038531"><span class="hs-identifier hs-var">mop</span></a></span></span><span>
</span><span id="line-431"></span><span>                 </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-keyword">do</span><span>  </span><span id="local-6989586621681038530"><span class="annot"><span class="annottext">Either CLabel CmmExpr
</span><a href="#local-6989586621681038530"><span class="hs-identifier hs-var">res</span></a></span></span><span>     </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">CallishMachOp -&gt; NatM (Either CLabel CmmExpr)
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.html#outOfLineMachOp"><span class="hs-identifier hs-var">outOfLineMachOp</span></a></span><span> </span><span class="annot"><span class="annottext">CallishMachOp
</span><a href="#local-6989586621681038531"><span class="hs-identifier hs-var">mop</span></a></span><span>
</span><span id="line-432"></span><span>                        </span><span id="local-6989586621681038528"><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681038528"><span class="hs-identifier hs-var">lblOrMopExpr</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="hs-keyword">case</span><span> </span><span class="annot"><span class="annottext">Either CLabel CmmExpr
</span><a href="#local-6989586621681038530"><span class="hs-identifier hs-var">res</span></a></span><span> </span><span class="hs-keyword">of</span><span>
</span><span id="line-433"></span><span>                                </span><span class="annot"><a href="../../base/src/Data.Either.html#Left"><span class="hs-identifier hs-type">Left</span></a></span><span> </span><span id="local-6989586621681038527"><span class="annot"><span class="annottext">CLabel
</span><a href="#local-6989586621681038527"><span class="hs-identifier hs-var">lbl</span></a></span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-434"></span><span>                                        </span><span class="annot"><span class="annottext">InstrBlock -&gt; NatM InstrBlock
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Instr -&gt; InstrBlock
forall a. a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#unitOL"><span class="hs-identifier hs-var">unitOL</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Either Imm Reg -&gt; Int -&gt; Bool -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#CALL"><span class="hs-identifier hs-var">CALL</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Imm -&gt; Either Imm Reg
forall a b. a -&gt; Either a b
</span><a href="../../base/src/Data.Either.html#Left"><span class="hs-identifier hs-var">Left</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">CmmLit -&gt; Imm
</span><a href="GHC.CmmToAsm.SPARC.Imm.html#litToImm"><span class="hs-identifier hs-var">litToImm</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">CLabel -&gt; CmmLit
</span><a href="GHC.Cmm.Expr.html#CmmLabel"><span class="hs-identifier hs-var">CmmLabel</span></a></span><span> </span><span class="annot"><span class="annottext">CLabel
</span><a href="#local-6989586621681038527"><span class="hs-identifier hs-var">lbl</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681038542"><span class="hs-identifier hs-var">n_argRegs_used</span></a></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><span id="line-435"></span><span>
</span><span id="line-436"></span><span>                                </span><span class="annot"><a href="../../base/src/Data.Either.html#Right"><span class="hs-identifier hs-type">Right</span></a></span><span> </span><span id="local-6989586621681038526"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681038526"><span class="hs-identifier hs-var">mopExpr</span></a></span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-437"></span><span>                                        </span><span class="hs-special">(</span><span id="local-6989586621681038525"><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681038525"><span class="hs-identifier hs-var">dyn_c</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681038524"><span class="annot"><span class="annottext">[Reg]
</span><a href="#local-6989586621681038524"><span class="hs-identifier hs-var">dyn_rs</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">CmmExpr -&gt; NatM (InstrBlock, [Reg])
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.html#arg_to_int_vregs"><span class="hs-identifier hs-var">arg_to_int_vregs</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681038526"><span class="hs-identifier hs-var">mopExpr</span></a></span><span>
</span><span id="line-438"></span><span>                                        </span><span class="hs-keyword">let</span><span> </span><span id="local-6989586621681038523"><span class="annot"><span class="annottext">dyn_r :: Reg
</span><a href="#local-6989586621681038523"><span class="hs-identifier hs-var hs-var">dyn_r</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">case</span><span> </span><span class="annot"><span class="annottext">[Reg]
</span><a href="#local-6989586621681038524"><span class="hs-identifier hs-var">dyn_rs</span></a></span><span> </span><span class="hs-keyword">of</span><span>
</span><span id="line-439"></span><span>                                                      </span><span class="hs-special">[</span><span id="local-6989586621681038522"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681038522"><span class="hs-identifier hs-var">dyn_r'</span></a></span></span><span class="hs-special">]</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681038522"><span class="hs-identifier hs-var">dyn_r'</span></a></span><span>
</span><span id="line-440"></span><span>                                                      </span><span class="annot"><span class="annottext">[Reg]
</span><span class="hs-identifier">_</span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">String -&gt; Reg
forall a. String -&gt; a
</span><a href="GHC.Utils.Panic.Plain.html#panic"><span class="hs-identifier hs-var">panic</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;SPARC.CodeGen.genCCall: arg_to_int&quot;</span></span><span>
</span><span id="line-441"></span><span>                                        </span><span class="annot"><span class="annottext">InstrBlock -&gt; NatM InstrBlock
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681038525"><span class="hs-identifier hs-var">dyn_c</span></a></span><span> </span><span class="annot"><span class="annottext">InstrBlock -&gt; Instr -&gt; InstrBlock
forall a. OrdList a -&gt; a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#snocOL"><span class="hs-operator hs-var">`snocOL`</span></a></span><span> </span><span class="annot"><span class="annottext">Either Imm Reg -&gt; Int -&gt; Bool -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#CALL"><span class="hs-identifier hs-var">CALL</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; Either Imm Reg
forall a b. b -&gt; Either a b
</span><a href="../../base/src/Data.Either.html#Right"><span class="hs-identifier hs-var">Right</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681038523"><span class="hs-identifier hs-var">dyn_r</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681038542"><span class="hs-identifier hs-var">n_argRegs_used</span></a></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span class="hs-special">)</span><span>
</span><span id="line-442"></span><span>
</span><span id="line-443"></span><span>                        </span><span class="annot"><span class="annottext">InstrBlock -&gt; NatM InstrBlock
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681038528"><span class="hs-identifier hs-var">lblOrMopExpr</span></a></span><span>
</span><span id="line-444"></span><span>
</span><span id="line-445"></span><span>        </span><span class="hs-keyword">let</span><span> </span><span id="local-6989586621681038521"><span class="annot"><span class="annottext">argcode :: InstrBlock
</span><a href="#local-6989586621681038521"><span class="hs-identifier hs-var hs-var">argcode</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">[InstrBlock] -&gt; InstrBlock
forall a. [OrdList a] -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#concatOL"><span class="hs-identifier hs-var">concatOL</span></a></span><span> </span><span class="annot"><span class="annottext">[InstrBlock]
</span><a href="#local-6989586621681038550"><span class="hs-identifier hs-var">argcodes</span></a></span><span>
</span><span id="line-446"></span><span>
</span><span id="line-447"></span><span>        </span><span class="hs-keyword">let</span><span> </span><span class="hs-special">(</span><span id="local-6989586621681038520"><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681038520"><span class="hs-identifier hs-var">move_sp_down</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681038519"><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681038519"><span class="hs-identifier hs-var">move_sp_up</span></a></span></span><span class="hs-special">)</span><span>
</span><span id="line-448"></span><span>                   </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">let</span><span> </span><span id="local-6989586621681038518"><span class="annot"><span class="annottext">diff :: Int
</span><a href="#local-6989586621681038518"><span class="hs-identifier hs-var hs-var">diff</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">[Reg] -&gt; Int
forall (t :: * -&gt; *) a. Foldable t =&gt; t a -&gt; Int
</span><a href="../../base/src/Data.Foldable.html#length"><span class="hs-identifier hs-var">length</span></a></span><span> </span><span class="annot"><span class="annottext">[Reg]
</span><a href="#local-6989586621681038547"><span class="hs-identifier hs-var">vregs</span></a></span><span> </span><span class="annot"><span class="annottext">Int -&gt; Int -&gt; Int
forall a. Num a =&gt; a -&gt; a -&gt; a
</span><a href="../../base/src/GHC.Num.html#-"><span class="hs-glyph hs-var">-</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681038545"><span class="hs-identifier hs-var">n_argRegs</span></a></span><span>
</span><span id="line-449"></span><span>                         </span><span id="local-6989586621681038517"><span class="annot"><span class="annottext">nn :: Int
</span><a href="#local-6989586621681038517"><span class="hs-identifier hs-var hs-var">nn</span></a></span></span><span>   </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">if</span><span> </span><span class="annot"><span class="annottext">Int -&gt; Bool
forall a. Integral a =&gt; a -&gt; Bool
</span><a href="../../base/src/GHC.Real.html#odd"><span class="hs-identifier hs-var">odd</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681038518"><span class="hs-identifier hs-var">diff</span></a></span><span> </span><span class="hs-keyword">then</span><span> </span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681038518"><span class="hs-identifier hs-var">diff</span></a></span><span> </span><span class="annot"><span class="annottext">Int -&gt; Int -&gt; Int
forall a. Num a =&gt; a -&gt; a -&gt; a
</span><a href="../../base/src/GHC.Num.html#%2B"><span class="hs-operator hs-var">+</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">1</span></span><span> </span><span class="hs-keyword">else</span><span> </span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681038518"><span class="hs-identifier hs-var">diff</span></a></span><span> </span><span class="hs-comment">-- keep 8-byte alignment</span><span>
</span><span id="line-450"></span><span>                     </span><span class="hs-keyword">in</span><span>  </span><span class="hs-keyword">if</span><span>   </span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681038517"><span class="hs-identifier hs-var">nn</span></a></span><span> </span><span class="annot"><span class="annottext">Int -&gt; Int -&gt; Bool
forall a. Ord a =&gt; a -&gt; a -&gt; Bool
</span><span class="hs-operator hs-var">&lt;=</span></span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">0</span></span><span>
</span><span id="line-451"></span><span>                         </span><span class="hs-keyword">then</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">InstrBlock
forall a. OrdList a
</span><a href="GHC.Data.OrdList.html#nilOL"><span class="hs-identifier hs-var">nilOL</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">InstrBlock
forall a. OrdList a
</span><a href="GHC.Data.OrdList.html#nilOL"><span class="hs-identifier hs-var">nilOL</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-452"></span><span>                         </span><span class="hs-keyword">else</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Instr -&gt; InstrBlock
forall a. a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#unitOL"><span class="hs-identifier hs-var">unitOL</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Int -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#moveSp"><span class="hs-identifier hs-var">moveSp</span></a></span><span> </span><span class="hs-special">(</span><span class="hs-glyph">-</span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">1</span></span><span class="annot"><span class="annottext">Int -&gt; Int -&gt; Int
forall a. Num a =&gt; a -&gt; a -&gt; a
</span><a href="../../base/src/GHC.Num.html#%2A"><span class="hs-operator hs-var">*</span></a></span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681038517"><span class="hs-identifier hs-var">nn</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Instr -&gt; InstrBlock
forall a. a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#unitOL"><span class="hs-identifier hs-var">unitOL</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Int -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#moveSp"><span class="hs-identifier hs-var">moveSp</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">1</span></span><span class="annot"><span class="annottext">Int -&gt; Int -&gt; Int
forall a. Num a =&gt; a -&gt; a -&gt; a
</span><a href="../../base/src/GHC.Num.html#%2A"><span class="hs-operator hs-var">*</span></a></span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681038517"><span class="hs-identifier hs-var">nn</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><span id="line-453"></span><span>
</span><span id="line-454"></span><span>        </span><span class="hs-keyword">let</span><span> </span><span id="local-6989586621681038511"><span class="annot"><span class="annottext">transfer_code :: InstrBlock
</span><a href="#local-6989586621681038511"><span class="hs-identifier hs-var hs-var">transfer_code</span></a></span></span><span>
</span><span id="line-455"></span><span>                </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">[Instr] -&gt; InstrBlock
forall a. [a] -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#toOL"><span class="hs-identifier hs-var">toOL</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">[Reg] -&gt; [Reg] -&gt; Int -&gt; [Instr]
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.html#move_final"><span class="hs-identifier hs-var">move_final</span></a></span><span> </span><span class="annot"><span class="annottext">[Reg]
</span><a href="#local-6989586621681038547"><span class="hs-identifier hs-var">vregs</span></a></span><span> </span><span class="annot"><span class="annottext">[Reg]
</span><a href="GHC.CmmToAsm.SPARC.Regs.html#allArgRegs"><span class="hs-identifier hs-var">allArgRegs</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><a href="GHC.CmmToAsm.SPARC.Base.html#extraStackArgsHere"><span class="hs-identifier hs-var">extraStackArgsHere</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-456"></span><span>
</span><span id="line-457"></span><span>        </span><span id="local-6989586621681038508"><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681038508"><span class="hs-identifier hs-var">platform</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">NatM Platform
</span><a href="GHC.CmmToAsm.Monad.html#getPlatform"><span class="hs-identifier hs-var">getPlatform</span></a></span><span>
</span><span id="line-458"></span><span>        </span><span class="annot"><span class="annottext">InstrBlock -&gt; NatM InstrBlock
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span>
</span><span id="line-459"></span><span>         </span><span class="annot"><span class="annottext">(InstrBlock -&gt; NatM InstrBlock) -&gt; InstrBlock -&gt; NatM InstrBlock
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span>      </span><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681038521"><span class="hs-identifier hs-var">argcode</span></a></span><span>                 </span><span class="annot"><span class="annottext">InstrBlock -&gt; InstrBlock -&gt; InstrBlock
forall a. OrdList a -&gt; OrdList a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#appOL"><span class="hs-operator hs-var">`appOL`</span></a></span><span>
</span><span id="line-460"></span><span>                </span><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681038520"><span class="hs-identifier hs-var">move_sp_down</span></a></span><span>            </span><span class="annot"><span class="annottext">InstrBlock -&gt; InstrBlock -&gt; InstrBlock
forall a. OrdList a -&gt; OrdList a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#appOL"><span class="hs-operator hs-var">`appOL`</span></a></span><span>
</span><span id="line-461"></span><span>                </span><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681038511"><span class="hs-identifier hs-var">transfer_code</span></a></span><span>           </span><span class="annot"><span class="annottext">InstrBlock -&gt; InstrBlock -&gt; InstrBlock
forall a. OrdList a -&gt; OrdList a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#appOL"><span class="hs-operator hs-var">`appOL`</span></a></span><span>
</span><span id="line-462"></span><span>                </span><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681038540"><span class="hs-identifier hs-var">callinsns</span></a></span><span>               </span><span class="annot"><span class="annottext">InstrBlock -&gt; InstrBlock -&gt; InstrBlock
forall a. OrdList a -&gt; OrdList a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#appOL"><span class="hs-operator hs-var">`appOL`</span></a></span><span>
</span><span id="line-463"></span><span>                </span><span class="annot"><span class="annottext">Instr -&gt; InstrBlock
forall a. a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#unitOL"><span class="hs-identifier hs-var">unitOL</span></a></span><span> </span><span class="annot"><span class="annottext">Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#NOP"><span class="hs-identifier hs-var">NOP</span></a></span><span>              </span><span class="annot"><span class="annottext">InstrBlock -&gt; InstrBlock -&gt; InstrBlock
forall a. OrdList a -&gt; OrdList a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#appOL"><span class="hs-operator hs-var">`appOL`</span></a></span><span>
</span><span id="line-464"></span><span>                </span><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681038519"><span class="hs-identifier hs-var">move_sp_up</span></a></span><span>              </span><span class="annot"><span class="annottext">InstrBlock -&gt; InstrBlock -&gt; InstrBlock
forall a. OrdList a -&gt; OrdList a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#appOL"><span class="hs-operator hs-var">`appOL`</span></a></span><span>
</span><span id="line-465"></span><span>                </span><span class="annot"><span class="annottext">Platform -&gt; [CmmFormal] -&gt; InstrBlock
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.html#assign_code"><span class="hs-identifier hs-var">assign_code</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681038508"><span class="hs-identifier hs-var">platform</span></a></span><span> </span><span class="annot"><span class="annottext">[CmmFormal]
</span><a href="#local-6989586621681038554"><span class="hs-identifier hs-var">dest_regs</span></a></span><span>
</span><span id="line-466"></span><span>
</span><span id="line-467"></span><span>
</span><span id="line-468"></span><span class="hs-comment">-- | Generate code to calculate an argument, and move it into one</span><span>
</span><span id="line-469"></span><span class="hs-comment">--      or two integer vregs.</span><span>
</span><span id="line-470"></span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.html#arg_to_int_vregs"><span class="hs-identifier hs-type">arg_to_int_vregs</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmExpr"><span class="hs-identifier hs-type">CmmExpr</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.Monad.html#NatM"><span class="hs-identifier hs-type">NatM</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Data.OrdList.html#OrdList"><span class="hs-identifier hs-type">OrdList</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.Instr.html#Instr"><span class="hs-identifier hs-type">Instr</span></a></span><span class="hs-special">,</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Platform.Reg.html#Reg"><span class="hs-identifier hs-type">Reg</span></a></span><span class="hs-special">]</span><span class="hs-special">)</span><span>
</span><span id="line-471"></span><span id="arg_to_int_vregs"><span class="annot"><span class="annottext">arg_to_int_vregs :: CmmExpr -&gt; NatM (InstrBlock, [Reg])
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.html#arg_to_int_vregs"><span class="hs-identifier hs-var hs-var">arg_to_int_vregs</span></a></span></span><span> </span><span id="local-6989586621681038506"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681038506"><span class="hs-identifier hs-var">arg</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span> </span><span id="local-6989586621681038505"><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681038505"><span class="hs-identifier hs-var">platform</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">NatM Platform
</span><a href="GHC.CmmToAsm.Monad.html#getPlatform"><span class="hs-identifier hs-var">getPlatform</span></a></span><span>
</span><span id="line-472"></span><span>                          </span><span class="annot"><span class="annottext">Platform -&gt; CmmExpr -&gt; NatM (InstrBlock, [Reg])
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.html#arg_to_int_vregs%27"><span class="hs-identifier hs-var">arg_to_int_vregs'</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681038505"><span class="hs-identifier hs-var">platform</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681038506"><span class="hs-identifier hs-var">arg</span></a></span><span>
</span><span id="line-473"></span><span>
</span><span id="line-474"></span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.html#arg_to_int_vregs%27"><span class="hs-identifier hs-type">arg_to_int_vregs'</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="../../ghc-boot/src/GHC.Platform.html#Platform"><span class="hs-identifier hs-type">Platform</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmExpr"><span class="hs-identifier hs-type">CmmExpr</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.Monad.html#NatM"><span class="hs-identifier hs-type">NatM</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Data.OrdList.html#OrdList"><span class="hs-identifier hs-type">OrdList</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.Instr.html#Instr"><span class="hs-identifier hs-type">Instr</span></a></span><span class="hs-special">,</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Platform.Reg.html#Reg"><span class="hs-identifier hs-type">Reg</span></a></span><span class="hs-special">]</span><span class="hs-special">)</span><span>
</span><span id="line-475"></span><span id="arg_to_int_vregs%27"><span class="annot"><span class="annottext">arg_to_int_vregs' :: Platform -&gt; CmmExpr -&gt; NatM (InstrBlock, [Reg])
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.html#arg_to_int_vregs%27"><span class="hs-identifier hs-var hs-var">arg_to_int_vregs'</span></a></span></span><span> </span><span id="local-6989586621681038503"><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681038503"><span class="hs-identifier hs-var">platform</span></a></span></span><span> </span><span id="local-6989586621681038502"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681038502"><span class="hs-identifier hs-var">arg</span></a></span></span><span>
</span><span id="line-476"></span><span>
</span><span id="line-477"></span><span>        </span><span class="hs-comment">-- If the expr produces a 64 bit int, then we can just use iselExpr64</span><span>
</span><span id="line-478"></span><span>        </span><span class="hs-glyph">|</span><span> </span><span class="annot"><span class="annottext">CmmType -&gt; Bool
</span><a href="GHC.Cmm.Type.html#isWord64"><span class="hs-identifier hs-var">isWord64</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Platform -&gt; CmmExpr -&gt; CmmType
</span><a href="GHC.Cmm.Expr.html#cmmExprType"><span class="hs-identifier hs-var">cmmExprType</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681038503"><span class="hs-identifier hs-var">platform</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681038502"><span class="hs-identifier hs-var">arg</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-479"></span><span>        </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>    </span><span class="hs-special">(</span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#ChildCode64"><span class="hs-identifier hs-type">ChildCode64</span></a></span><span> </span><span id="local-6989586621681038500"><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681038500"><span class="hs-identifier hs-var">code</span></a></span></span><span> </span><span id="local-6989586621681038499"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681038499"><span class="hs-identifier hs-var">r_lo</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">CmmExpr -&gt; NatM ChildCode64
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen64.html#iselExpr64"><span class="hs-identifier hs-var">iselExpr64</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681038502"><span class="hs-identifier hs-var">arg</span></a></span><span>
</span><span id="line-480"></span><span>                </span><span class="hs-keyword">let</span><span> </span><span id="local-6989586621681038497"><span class="annot"><span class="annottext">r_hi :: Reg
</span><a href="#local-6989586621681038497"><span class="hs-identifier hs-var hs-var">r_hi</span></a></span></span><span>                </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Reg -&gt; Reg
</span><a href="GHC.Platform.Reg.html#getHiVRegFromLo"><span class="hs-identifier hs-var">getHiVRegFromLo</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681038499"><span class="hs-identifier hs-var">r_lo</span></a></span><span>
</span><span id="line-481"></span><span>                </span><span class="annot"><span class="annottext">(InstrBlock, [Reg]) -&gt; NatM (InstrBlock, [Reg])
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681038500"><span class="hs-identifier hs-var">code</span></a></span><span class="hs-special">,</span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681038497"><span class="hs-identifier hs-var">r_hi</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681038499"><span class="hs-identifier hs-var">r_lo</span></a></span><span class="hs-special">]</span><span class="hs-special">)</span><span>
</span><span id="line-482"></span><span>
</span><span id="line-483"></span><span>        </span><span class="hs-glyph">|</span><span> </span><span class="annot"><span class="annottext">Bool
</span><a href="../../base/src/GHC.Base.html#otherwise"><span class="hs-identifier hs-var">otherwise</span></a></span><span>
</span><span id="line-484"></span><span>        </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>    </span><span class="hs-special">(</span><span id="local-6989586621681038495"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681038495"><span class="hs-identifier hs-var">src</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681038494"><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681038494"><span class="hs-identifier hs-var">code</span></a></span></span><span class="hs-special">)</span><span>     </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">CmmExpr -&gt; NatM (Reg, InstrBlock)
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#getSomeReg"><span class="hs-identifier hs-var">getSomeReg</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681038502"><span class="hs-identifier hs-var">arg</span></a></span><span>
</span><span id="line-485"></span><span>                </span><span class="hs-keyword">let</span><span> </span><span id="local-6989586621681038493"><span class="annot"><span class="annottext">pk :: CmmType
</span><a href="#local-6989586621681038493"><span class="hs-identifier hs-var hs-var">pk</span></a></span></span><span>          </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Platform -&gt; CmmExpr -&gt; CmmType
</span><a href="GHC.Cmm.Expr.html#cmmExprType"><span class="hs-identifier hs-var">cmmExprType</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681038503"><span class="hs-identifier hs-var">platform</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681038502"><span class="hs-identifier hs-var">arg</span></a></span><span>
</span><span id="line-486"></span><span>
</span><span id="line-487"></span><span>                </span><span class="hs-keyword">case</span><span> </span><span class="annot"><span class="annottext">CmmType -&gt; Format
</span><a href="GHC.CmmToAsm.Format.html#cmmTypeFormat"><span class="hs-identifier hs-var">cmmTypeFormat</span></a></span><span> </span><span class="annot"><span class="annottext">CmmType
</span><a href="#local-6989586621681038493"><span class="hs-identifier hs-var">pk</span></a></span><span> </span><span class="hs-keyword">of</span><span>
</span><span id="line-488"></span><span>
</span><span id="line-489"></span><span>                 </span><span class="hs-comment">-- Load a 64 bit float return value into two integer regs.</span><span>
</span><span id="line-490"></span><span>                 </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#FF64"><span class="hs-identifier hs-var">FF64</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-491"></span><span>                        </span><span id="local-6989586621681038491"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681038491"><span class="hs-identifier hs-var">v1</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">Format -&gt; NatM Reg
</span><a href="GHC.CmmToAsm.Monad.html#getNewRegNat"><span class="hs-identifier hs-var">getNewRegNat</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#II32"><span class="hs-identifier hs-var">II32</span></a></span><span>
</span><span id="line-492"></span><span>                        </span><span id="local-6989586621681038490"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681038490"><span class="hs-identifier hs-var">v2</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">Format -&gt; NatM Reg
</span><a href="GHC.CmmToAsm.Monad.html#getNewRegNat"><span class="hs-identifier hs-var">getNewRegNat</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#II32"><span class="hs-identifier hs-var">II32</span></a></span><span>
</span><span id="line-493"></span><span>
</span><span id="line-494"></span><span>                        </span><span class="hs-keyword">let</span><span> </span><span id="local-6989586621681038489"><span class="annot"><span class="annottext">code2 :: InstrBlock
</span><a href="#local-6989586621681038489"><span class="hs-identifier hs-var hs-var">code2</span></a></span></span><span> </span><span class="hs-glyph">=</span><span>
</span><span id="line-495"></span><span>                                </span><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681038494"><span class="hs-identifier hs-var">code</span></a></span><span>                            </span><span class="annot"><span class="annottext">InstrBlock -&gt; Instr -&gt; InstrBlock
forall a. OrdList a -&gt; a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#snocOL"><span class="hs-operator hs-var">`snocOL`</span></a></span><span>
</span><span id="line-496"></span><span>                                </span><span class="annot"><span class="annottext">Format -&gt; Reg -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#FMOV"><span class="hs-identifier hs-var">FMOV</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#FF64"><span class="hs-identifier hs-var">FF64</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681038495"><span class="hs-identifier hs-var">src</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="GHC.CmmToAsm.SPARC.Regs.html#f0"><span class="hs-identifier hs-var">f0</span></a></span><span>                </span><span class="annot"><span class="annottext">InstrBlock -&gt; Instr -&gt; InstrBlock
forall a. OrdList a -&gt; a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#snocOL"><span class="hs-operator hs-var">`snocOL`</span></a></span><span>
</span><span id="line-497"></span><span>                                </span><span class="annot"><span class="annottext">Format -&gt; Reg -&gt; AddrMode -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#ST"><span class="hs-identifier hs-var">ST</span></a></span><span>   </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#FF32"><span class="hs-identifier hs-var">FF32</span></a></span><span>  </span><span class="annot"><span class="annottext">Reg
</span><a href="GHC.CmmToAsm.SPARC.Regs.html#f0"><span class="hs-identifier hs-var">f0</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Int -&gt; AddrMode
</span><a href="GHC.CmmToAsm.SPARC.Stack.html#spRel"><span class="hs-identifier hs-var">spRel</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">16</span></span><span class="hs-special">)</span><span>        </span><span class="annot"><span class="annottext">InstrBlock -&gt; Instr -&gt; InstrBlock
forall a. OrdList a -&gt; a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#snocOL"><span class="hs-operator hs-var">`snocOL`</span></a></span><span>
</span><span id="line-498"></span><span>                                </span><span class="annot"><span class="annottext">Format -&gt; AddrMode -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#LD"><span class="hs-identifier hs-var">LD</span></a></span><span>   </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#II32"><span class="hs-identifier hs-var">II32</span></a></span><span>  </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Int -&gt; AddrMode
</span><a href="GHC.CmmToAsm.SPARC.Stack.html#spRel"><span class="hs-identifier hs-var">spRel</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">16</span></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681038491"><span class="hs-identifier hs-var">v1</span></a></span><span>        </span><span class="annot"><span class="annottext">InstrBlock -&gt; Instr -&gt; InstrBlock
forall a. OrdList a -&gt; a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#snocOL"><span class="hs-operator hs-var">`snocOL`</span></a></span><span>
</span><span id="line-499"></span><span>                                </span><span class="annot"><span class="annottext">Format -&gt; Reg -&gt; AddrMode -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#ST"><span class="hs-identifier hs-var">ST</span></a></span><span>   </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#FF32"><span class="hs-identifier hs-var">FF32</span></a></span><span>  </span><span class="annot"><span class="annottext">Reg
</span><a href="GHC.CmmToAsm.SPARC.Regs.html#f1"><span class="hs-identifier hs-var">f1</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Int -&gt; AddrMode
</span><a href="GHC.CmmToAsm.SPARC.Stack.html#spRel"><span class="hs-identifier hs-var">spRel</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">16</span></span><span class="hs-special">)</span><span>        </span><span class="annot"><span class="annottext">InstrBlock -&gt; Instr -&gt; InstrBlock
forall a. OrdList a -&gt; a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#snocOL"><span class="hs-operator hs-var">`snocOL`</span></a></span><span>
</span><span id="line-500"></span><span>                                </span><span class="annot"><span class="annottext">Format -&gt; AddrMode -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#LD"><span class="hs-identifier hs-var">LD</span></a></span><span>   </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#II32"><span class="hs-identifier hs-var">II32</span></a></span><span>  </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Int -&gt; AddrMode
</span><a href="GHC.CmmToAsm.SPARC.Stack.html#spRel"><span class="hs-identifier hs-var">spRel</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">16</span></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681038490"><span class="hs-identifier hs-var">v2</span></a></span><span>
</span><span id="line-501"></span><span>
</span><span id="line-502"></span><span>                        </span><span class="annot"><span class="annottext">(InstrBlock, [Reg]) -&gt; NatM (InstrBlock, [Reg])
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span>  </span><span class="hs-special">(</span><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681038489"><span class="hs-identifier hs-var">code2</span></a></span><span class="hs-special">,</span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681038491"><span class="hs-identifier hs-var">v1</span></a></span><span class="hs-special">,</span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681038490"><span class="hs-identifier hs-var">v2</span></a></span><span class="hs-special">]</span><span class="hs-special">)</span><span>
</span><span id="line-503"></span><span>
</span><span id="line-504"></span><span>                 </span><span class="hs-comment">-- Load a 32 bit float return value into an integer reg</span><span>
</span><span id="line-505"></span><span>                 </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#FF32"><span class="hs-identifier hs-var">FF32</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-506"></span><span>                        </span><span id="local-6989586621681038484"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681038484"><span class="hs-identifier hs-var">v1</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">Format -&gt; NatM Reg
</span><a href="GHC.CmmToAsm.Monad.html#getNewRegNat"><span class="hs-identifier hs-var">getNewRegNat</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#II32"><span class="hs-identifier hs-var">II32</span></a></span><span>
</span><span id="line-507"></span><span>
</span><span id="line-508"></span><span>                        </span><span class="hs-keyword">let</span><span> </span><span id="local-6989586621681038483"><span class="annot"><span class="annottext">code2 :: InstrBlock
</span><a href="#local-6989586621681038483"><span class="hs-identifier hs-var hs-var">code2</span></a></span></span><span> </span><span class="hs-glyph">=</span><span>
</span><span id="line-509"></span><span>                                </span><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681038494"><span class="hs-identifier hs-var">code</span></a></span><span>                            </span><span class="annot"><span class="annottext">InstrBlock -&gt; Instr -&gt; InstrBlock
forall a. OrdList a -&gt; a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#snocOL"><span class="hs-operator hs-var">`snocOL`</span></a></span><span>
</span><span id="line-510"></span><span>                                </span><span class="annot"><span class="annottext">Format -&gt; Reg -&gt; AddrMode -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#ST"><span class="hs-identifier hs-var">ST</span></a></span><span>   </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#FF32"><span class="hs-identifier hs-var">FF32</span></a></span><span>  </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681038495"><span class="hs-identifier hs-var">src</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Int -&gt; AddrMode
</span><a href="GHC.CmmToAsm.SPARC.Stack.html#spRel"><span class="hs-identifier hs-var">spRel</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">16</span></span><span class="hs-special">)</span><span>       </span><span class="annot"><span class="annottext">InstrBlock -&gt; Instr -&gt; InstrBlock
forall a. OrdList a -&gt; a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#snocOL"><span class="hs-operator hs-var">`snocOL`</span></a></span><span>
</span><span id="line-511"></span><span>                                </span><span class="annot"><span class="annottext">Format -&gt; AddrMode -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#LD"><span class="hs-identifier hs-var">LD</span></a></span><span>   </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#II32"><span class="hs-identifier hs-var">II32</span></a></span><span>  </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Int -&gt; AddrMode
</span><a href="GHC.CmmToAsm.SPARC.Stack.html#spRel"><span class="hs-identifier hs-var">spRel</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">16</span></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681038484"><span class="hs-identifier hs-var">v1</span></a></span><span>
</span><span id="line-512"></span><span>
</span><span id="line-513"></span><span>                        </span><span class="annot"><span class="annottext">(InstrBlock, [Reg]) -&gt; NatM (InstrBlock, [Reg])
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681038483"><span class="hs-identifier hs-var">code2</span></a></span><span class="hs-special">,</span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681038484"><span class="hs-identifier hs-var">v1</span></a></span><span class="hs-special">]</span><span class="hs-special">)</span><span>
</span><span id="line-514"></span><span>
</span><span id="line-515"></span><span>                 </span><span class="hs-comment">-- Move an integer return value into its destination reg.</span><span>
</span><span id="line-516"></span><span>                 </span><span class="annot"><span class="annottext">Format
</span><span class="hs-identifier">_</span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-517"></span><span>                        </span><span id="local-6989586621681038482"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681038482"><span class="hs-identifier hs-var">v1</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">Format -&gt; NatM Reg
</span><a href="GHC.CmmToAsm.Monad.html#getNewRegNat"><span class="hs-identifier hs-var">getNewRegNat</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#II32"><span class="hs-identifier hs-var">II32</span></a></span><span>
</span><span id="line-518"></span><span>
</span><span id="line-519"></span><span>                        </span><span class="hs-keyword">let</span><span> </span><span id="local-6989586621681038481"><span class="annot"><span class="annottext">code2 :: InstrBlock
</span><a href="#local-6989586621681038481"><span class="hs-identifier hs-var hs-var">code2</span></a></span></span><span> </span><span class="hs-glyph">=</span><span>
</span><span id="line-520"></span><span>                                </span><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681038494"><span class="hs-identifier hs-var">code</span></a></span><span>                            </span><span class="annot"><span class="annottext">InstrBlock -&gt; Instr -&gt; InstrBlock
forall a. OrdList a -&gt; a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#snocOL"><span class="hs-operator hs-var">`snocOL`</span></a></span><span>
</span><span id="line-521"></span><span>                                </span><span class="annot"><span class="annottext">Bool -&gt; Reg -&gt; RI -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#OR"><span class="hs-identifier hs-var">OR</span></a></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="GHC.CmmToAsm.SPARC.Regs.html#g0"><span class="hs-identifier hs-var">g0</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; RI
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#RIReg"><span class="hs-identifier hs-var">RIReg</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681038495"><span class="hs-identifier hs-var">src</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681038482"><span class="hs-identifier hs-var">v1</span></a></span><span>
</span><span id="line-522"></span><span>
</span><span id="line-523"></span><span>                        </span><span class="annot"><span class="annottext">(InstrBlock, [Reg]) -&gt; NatM (InstrBlock, [Reg])
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681038481"><span class="hs-identifier hs-var">code2</span></a></span><span class="hs-special">,</span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681038482"><span class="hs-identifier hs-var">v1</span></a></span><span class="hs-special">]</span><span class="hs-special">)</span><span>
</span><span id="line-524"></span><span>
</span><span id="line-525"></span><span>
</span><span id="line-526"></span><span class="hs-comment">-- | Move args from the integer vregs into which they have been</span><span>
</span><span id="line-527"></span><span class="hs-comment">--      marshalled, into %o0 .. %o5, and the rest onto the stack.</span><span>
</span><span id="line-528"></span><span class="hs-comment">--</span><span>
</span><span id="line-529"></span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.html#move_final"><span class="hs-identifier hs-type">move_final</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Platform.Reg.html#Reg"><span class="hs-identifier hs-type">Reg</span></a></span><span class="hs-special">]</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Platform.Reg.html#Reg"><span class="hs-identifier hs-type">Reg</span></a></span><span class="hs-special">]</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="hs-identifier hs-type">Int</span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.CmmToAsm.SPARC.Instr.html#Instr"><span class="hs-identifier hs-type">Instr</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-530"></span><span>
</span><span id="line-531"></span><span class="hs-comment">-- all args done</span><span>
</span><span id="line-532"></span><span id="move_final"><span class="annot"><span class="annottext">move_final :: [Reg] -&gt; [Reg] -&gt; Int -&gt; [Instr]
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.html#move_final"><span class="hs-identifier hs-var hs-var">move_final</span></a></span></span><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span> </span><span class="annot"><span class="annottext">[Reg]
</span><span class="hs-identifier">_</span></span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-identifier">_</span></span><span>
</span><span id="line-533"></span><span>        </span><span class="hs-glyph">=</span><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span>
</span><span id="line-534"></span><span>
</span><span id="line-535"></span><span class="hs-comment">-- out of aregs; move to stack</span><span>
</span><span id="line-536"></span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.html#move_final"><span class="hs-identifier hs-var">move_final</span></a></span><span> </span><span class="hs-special">(</span><span id="local-6989586621681038480"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681038480"><span class="hs-identifier hs-var">v</span></a></span></span><span class="annot"><span class="hs-glyph hs-type">:</span></span><span id="local-6989586621681038479"><span class="annot"><span class="annottext">[Reg]
</span><a href="#local-6989586621681038479"><span class="hs-identifier hs-var">vs</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span> </span><span id="local-6989586621681038478"><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681038478"><span class="hs-identifier hs-var">offset</span></a></span></span><span>
</span><span id="line-537"></span><span>        </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Format -&gt; Reg -&gt; AddrMode -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#ST"><span class="hs-identifier hs-var">ST</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#II32"><span class="hs-identifier hs-var">II32</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681038480"><span class="hs-identifier hs-var">v</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Int -&gt; AddrMode
</span><a href="GHC.CmmToAsm.SPARC.Stack.html#spRel"><span class="hs-identifier hs-var">spRel</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681038478"><span class="hs-identifier hs-var">offset</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-538"></span><span>        </span><span class="annot"><span class="annottext">Instr -&gt; [Instr] -&gt; [Instr]
forall a. a -&gt; [a] -&gt; [a]
</span><span class="hs-glyph hs-var">:</span></span><span> </span><span class="annot"><span class="annottext">[Reg] -&gt; [Reg] -&gt; Int -&gt; [Instr]
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.html#move_final"><span class="hs-identifier hs-var">move_final</span></a></span><span> </span><span class="annot"><span class="annottext">[Reg]
</span><a href="#local-6989586621681038479"><span class="hs-identifier hs-var">vs</span></a></span><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681038478"><span class="hs-identifier hs-var">offset</span></a></span><span class="annot"><span class="annottext">Int -&gt; Int -&gt; Int
forall a. Num a =&gt; a -&gt; a -&gt; a
</span><a href="../../base/src/GHC.Num.html#%2B"><span class="hs-operator hs-var">+</span></a></span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">1</span></span><span class="hs-special">)</span><span>
</span><span id="line-539"></span><span>
</span><span id="line-540"></span><span class="hs-comment">-- move into an arg (%o[0..5]) reg</span><span>
</span><span id="line-541"></span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.html#move_final"><span class="hs-identifier hs-var">move_final</span></a></span><span> </span><span class="hs-special">(</span><span id="local-6989586621681038477"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681038477"><span class="hs-identifier hs-var">v</span></a></span></span><span class="annot"><span class="hs-glyph hs-type">:</span></span><span id="local-6989586621681038476"><span class="annot"><span class="annottext">[Reg]
</span><a href="#local-6989586621681038476"><span class="hs-identifier hs-var">vs</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span id="local-6989586621681038475"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681038475"><span class="hs-identifier hs-var">a</span></a></span></span><span class="annot"><span class="hs-glyph hs-type">:</span></span><span id="local-6989586621681038474"><span class="annot"><span class="annottext">[Reg]
</span><a href="#local-6989586621681038474"><span class="hs-identifier hs-var">az</span></a></span></span><span class="hs-special">)</span><span> </span><span id="local-6989586621681038473"><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681038473"><span class="hs-identifier hs-var">offset</span></a></span></span><span>
</span><span id="line-542"></span><span>        </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Bool -&gt; Reg -&gt; RI -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#OR"><span class="hs-identifier hs-var">OR</span></a></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="GHC.CmmToAsm.SPARC.Regs.html#g0"><span class="hs-identifier hs-var">g0</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; RI
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#RIReg"><span class="hs-identifier hs-var">RIReg</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681038477"><span class="hs-identifier hs-var">v</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681038475"><span class="hs-identifier hs-var">a</span></a></span><span>
</span><span id="line-543"></span><span>        </span><span class="annot"><span class="annottext">Instr -&gt; [Instr] -&gt; [Instr]
forall a. a -&gt; [a] -&gt; [a]
</span><span class="hs-glyph hs-var">:</span></span><span> </span><span class="annot"><span class="annottext">[Reg] -&gt; [Reg] -&gt; Int -&gt; [Instr]
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.html#move_final"><span class="hs-identifier hs-var">move_final</span></a></span><span> </span><span class="annot"><span class="annottext">[Reg]
</span><a href="#local-6989586621681038476"><span class="hs-identifier hs-var">vs</span></a></span><span> </span><span class="annot"><span class="annottext">[Reg]
</span><a href="#local-6989586621681038474"><span class="hs-identifier hs-var">az</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681038473"><span class="hs-identifier hs-var">offset</span></a></span><span>
</span><span id="line-544"></span><span>
</span><span id="line-545"></span><span>
</span><span id="line-546"></span><span class="hs-comment">-- | Assign results returned from the call into their</span><span>
</span><span id="line-547"></span><span class="hs-comment">--      destination regs.</span><span>
</span><span id="line-548"></span><span class="hs-comment">--</span><span>
</span><span id="line-549"></span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.html#assign_code"><span class="hs-identifier hs-type">assign_code</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="../../ghc-boot/src/GHC.Platform.html#Platform"><span class="hs-identifier hs-type">Platform</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Cmm.Expr.html#LocalReg"><span class="hs-identifier hs-type">LocalReg</span></a></span><span class="hs-special">]</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Data.OrdList.html#OrdList"><span class="hs-identifier hs-type">OrdList</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.Instr.html#Instr"><span class="hs-identifier hs-type">Instr</span></a></span><span>
</span><span id="line-550"></span><span>
</span><span id="line-551"></span><span id="assign_code"><span class="annot"><span class="annottext">assign_code :: Platform -&gt; [CmmFormal] -&gt; InstrBlock
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.html#assign_code"><span class="hs-identifier hs-var hs-var">assign_code</span></a></span></span><span> </span><span class="annot"><span class="annottext">Platform
</span><span class="hs-identifier">_</span></span><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">InstrBlock
forall a. OrdList a
</span><a href="GHC.Data.OrdList.html#nilOL"><span class="hs-identifier hs-var">nilOL</span></a></span><span>
</span><span id="line-552"></span><span>
</span><span id="line-553"></span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.html#assign_code"><span class="hs-identifier hs-var">assign_code</span></a></span><span> </span><span id="local-6989586621681038471"><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681038471"><span class="hs-identifier hs-var">platform</span></a></span></span><span> </span><span class="hs-special">[</span><span id="local-6989586621681038470"><span class="annot"><span class="annottext">CmmFormal
</span><a href="#local-6989586621681038470"><span class="hs-identifier hs-var">dest</span></a></span></span><span class="hs-special">]</span><span>
</span><span id="line-554"></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">let</span><span>  </span><span id="local-6989586621681038469"><span class="annot"><span class="annottext">rep :: CmmType
</span><a href="#local-6989586621681038469"><span class="hs-identifier hs-var hs-var">rep</span></a></span></span><span>     </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">CmmFormal -&gt; CmmType
</span><a href="GHC.Cmm.Expr.html#localRegType"><span class="hs-identifier hs-var">localRegType</span></a></span><span> </span><span class="annot"><span class="annottext">CmmFormal
</span><a href="#local-6989586621681038470"><span class="hs-identifier hs-var">dest</span></a></span><span>
</span><span id="line-555"></span><span>        </span><span id="local-6989586621681038467"><span class="annot"><span class="annottext">width :: Width
</span><a href="#local-6989586621681038467"><span class="hs-identifier hs-var hs-var">width</span></a></span></span><span>   </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">CmmType -&gt; Width
</span><a href="GHC.Cmm.Type.html#typeWidth"><span class="hs-identifier hs-var">typeWidth</span></a></span><span> </span><span class="annot"><span class="annottext">CmmType
</span><a href="#local-6989586621681038469"><span class="hs-identifier hs-var">rep</span></a></span><span>
</span><span id="line-556"></span><span>        </span><span id="local-6989586621681038466"><span class="annot"><span class="annottext">r_dest :: Reg
</span><a href="#local-6989586621681038466"><span class="hs-identifier hs-var hs-var">r_dest</span></a></span></span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Platform -&gt; CmmReg -&gt; Reg
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#getRegisterReg"><span class="hs-identifier hs-var">getRegisterReg</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681038471"><span class="hs-identifier hs-var">platform</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">CmmFormal -&gt; CmmReg
</span><a href="GHC.Cmm.Expr.html#CmmLocal"><span class="hs-identifier hs-var">CmmLocal</span></a></span><span> </span><span class="annot"><span class="annottext">CmmFormal
</span><a href="#local-6989586621681038470"><span class="hs-identifier hs-var">dest</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-557"></span><span>
</span><span id="line-558"></span><span>        </span><span id="local-6989586621681038464"><span class="annot"><span class="annottext">result :: InstrBlock
</span><a href="#local-6989586621681038464"><span class="hs-identifier hs-var hs-var">result</span></a></span></span><span>
</span><span id="line-559"></span><span>                </span><span class="hs-glyph">|</span><span> </span><span class="annot"><span class="annottext">CmmType -&gt; Bool
</span><a href="GHC.Cmm.Type.html#isFloatType"><span class="hs-identifier hs-var">isFloatType</span></a></span><span> </span><span class="annot"><span class="annottext">CmmType
</span><a href="#local-6989586621681038469"><span class="hs-identifier hs-var">rep</span></a></span><span>
</span><span id="line-560"></span><span>                </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W32"><span class="hs-identifier hs-var">W32</span></a></span><span>   </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681038467"><span class="hs-identifier hs-var">width</span></a></span><span>
</span><span id="line-561"></span><span>                </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Instr -&gt; InstrBlock
forall a. a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#unitOL"><span class="hs-identifier hs-var">unitOL</span></a></span><span> </span><span class="annot"><span class="annottext">(Instr -&gt; InstrBlock) -&gt; Instr -&gt; InstrBlock
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">Format -&gt; Reg -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#FMOV"><span class="hs-identifier hs-var">FMOV</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#FF32"><span class="hs-identifier hs-var">FF32</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Int -&gt; Reg
</span><a href="GHC.Platform.Reg.html#regSingle"><span class="hs-identifier hs-var">regSingle</span></a></span><span> </span><span class="annot"><span class="annottext">(Int -&gt; Reg) -&gt; Int -&gt; Reg
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">Int -&gt; Int
</span><a href="GHC.CmmToAsm.SPARC.Regs.html#fReg"><span class="hs-identifier hs-var">fReg</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">0</span></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681038466"><span class="hs-identifier hs-var">r_dest</span></a></span><span>
</span><span id="line-562"></span><span>
</span><span id="line-563"></span><span>                </span><span class="hs-glyph">|</span><span> </span><span class="annot"><span class="annottext">CmmType -&gt; Bool
</span><a href="GHC.Cmm.Type.html#isFloatType"><span class="hs-identifier hs-var">isFloatType</span></a></span><span> </span><span class="annot"><span class="annottext">CmmType
</span><a href="#local-6989586621681038469"><span class="hs-identifier hs-var">rep</span></a></span><span>
</span><span id="line-564"></span><span>                </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W64"><span class="hs-identifier hs-var">W64</span></a></span><span>   </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681038467"><span class="hs-identifier hs-var">width</span></a></span><span>
</span><span id="line-565"></span><span>                </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Instr -&gt; InstrBlock
forall a. a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#unitOL"><span class="hs-identifier hs-var">unitOL</span></a></span><span> </span><span class="annot"><span class="annottext">(Instr -&gt; InstrBlock) -&gt; Instr -&gt; InstrBlock
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">Format -&gt; Reg -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#FMOV"><span class="hs-identifier hs-var">FMOV</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#FF64"><span class="hs-identifier hs-var">FF64</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Int -&gt; Reg
</span><a href="GHC.Platform.Reg.html#regSingle"><span class="hs-identifier hs-var">regSingle</span></a></span><span> </span><span class="annot"><span class="annottext">(Int -&gt; Reg) -&gt; Int -&gt; Reg
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">Int -&gt; Int
</span><a href="GHC.CmmToAsm.SPARC.Regs.html#fReg"><span class="hs-identifier hs-var">fReg</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">0</span></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681038466"><span class="hs-identifier hs-var">r_dest</span></a></span><span>
</span><span id="line-566"></span><span>
</span><span id="line-567"></span><span>                </span><span class="hs-glyph">|</span><span> </span><span class="annot"><span class="annottext">Bool -&gt; Bool
</span><span class="hs-identifier hs-var">not</span></span><span> </span><span class="annot"><span class="annottext">(Bool -&gt; Bool) -&gt; Bool -&gt; Bool
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">CmmType -&gt; Bool
</span><a href="GHC.Cmm.Type.html#isFloatType"><span class="hs-identifier hs-var">isFloatType</span></a></span><span> </span><span class="annot"><span class="annottext">CmmType
</span><a href="#local-6989586621681038469"><span class="hs-identifier hs-var">rep</span></a></span><span>
</span><span id="line-568"></span><span>                </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W32"><span class="hs-identifier hs-var">W32</span></a></span><span>   </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681038467"><span class="hs-identifier hs-var">width</span></a></span><span>
</span><span id="line-569"></span><span>                </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Instr -&gt; InstrBlock
forall a. a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#unitOL"><span class="hs-identifier hs-var">unitOL</span></a></span><span> </span><span class="annot"><span class="annottext">(Instr -&gt; InstrBlock) -&gt; Instr -&gt; InstrBlock
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">Platform -&gt; Reg -&gt; Reg -&gt; Instr
forall instr. Instruction instr =&gt; Platform -&gt; Reg -&gt; Reg -&gt; instr
</span><a href="GHC.CmmToAsm.Instr.html#mkRegRegMoveInstr"><span class="hs-identifier hs-var">mkRegRegMoveInstr</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681038471"><span class="hs-identifier hs-var">platform</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Int -&gt; Reg
</span><a href="GHC.Platform.Reg.html#regSingle"><span class="hs-identifier hs-var">regSingle</span></a></span><span> </span><span class="annot"><span class="annottext">(Int -&gt; Reg) -&gt; Int -&gt; Reg
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">Int -&gt; Int
</span><a href="GHC.CmmToAsm.SPARC.Regs.html#oReg"><span class="hs-identifier hs-var">oReg</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">0</span></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681038466"><span class="hs-identifier hs-var">r_dest</span></a></span><span>
</span><span id="line-570"></span><span>
</span><span id="line-571"></span><span>                </span><span class="hs-glyph">|</span><span> </span><span class="annot"><span class="annottext">Bool -&gt; Bool
</span><span class="hs-identifier hs-var">not</span></span><span> </span><span class="annot"><span class="annottext">(Bool -&gt; Bool) -&gt; Bool -&gt; Bool
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">CmmType -&gt; Bool
</span><a href="GHC.Cmm.Type.html#isFloatType"><span class="hs-identifier hs-var">isFloatType</span></a></span><span> </span><span class="annot"><span class="annottext">CmmType
</span><a href="#local-6989586621681038469"><span class="hs-identifier hs-var">rep</span></a></span><span>
</span><span id="line-572"></span><span>                </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W64"><span class="hs-identifier hs-var">W64</span></a></span><span>           </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681038467"><span class="hs-identifier hs-var">width</span></a></span><span>
</span><span id="line-573"></span><span>                </span><span class="hs-special">,</span><span> </span><span id="local-6989586621681038456"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681038456"><span class="hs-identifier hs-var">r_dest_hi</span></a></span></span><span>     </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">Reg -&gt; Reg
</span><a href="GHC.Platform.Reg.html#getHiVRegFromLo"><span class="hs-identifier hs-var">getHiVRegFromLo</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681038466"><span class="hs-identifier hs-var">r_dest</span></a></span><span>
</span><span id="line-574"></span><span>                </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">[Instr] -&gt; InstrBlock
forall a. [a] -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#toOL"><span class="hs-identifier hs-var">toOL</span></a></span><span>  </span><span class="hs-special">[</span><span> </span><span class="annot"><span class="annottext">Platform -&gt; Reg -&gt; Reg -&gt; Instr
forall instr. Instruction instr =&gt; Platform -&gt; Reg -&gt; Reg -&gt; instr
</span><a href="GHC.CmmToAsm.Instr.html#mkRegRegMoveInstr"><span class="hs-identifier hs-var">mkRegRegMoveInstr</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681038471"><span class="hs-identifier hs-var">platform</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Int -&gt; Reg
</span><a href="GHC.Platform.Reg.html#regSingle"><span class="hs-identifier hs-var">regSingle</span></a></span><span> </span><span class="annot"><span class="annottext">(Int -&gt; Reg) -&gt; Int -&gt; Reg
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">Int -&gt; Int
</span><a href="GHC.CmmToAsm.SPARC.Regs.html#oReg"><span class="hs-identifier hs-var">oReg</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">0</span></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681038456"><span class="hs-identifier hs-var">r_dest_hi</span></a></span><span>
</span><span id="line-575"></span><span>                        </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Platform -&gt; Reg -&gt; Reg -&gt; Instr
forall instr. Instruction instr =&gt; Platform -&gt; Reg -&gt; Reg -&gt; instr
</span><a href="GHC.CmmToAsm.Instr.html#mkRegRegMoveInstr"><span class="hs-identifier hs-var">mkRegRegMoveInstr</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681038471"><span class="hs-identifier hs-var">platform</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Int -&gt; Reg
</span><a href="GHC.Platform.Reg.html#regSingle"><span class="hs-identifier hs-var">regSingle</span></a></span><span> </span><span class="annot"><span class="annottext">(Int -&gt; Reg) -&gt; Int -&gt; Reg
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">Int -&gt; Int
</span><a href="GHC.CmmToAsm.SPARC.Regs.html#oReg"><span class="hs-identifier hs-var">oReg</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">1</span></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681038466"><span class="hs-identifier hs-var">r_dest</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-576"></span><span>
</span><span id="line-577"></span><span>                </span><span class="hs-glyph">|</span><span> </span><span class="annot"><span class="annottext">Bool
</span><a href="../../base/src/GHC.Base.html#otherwise"><span class="hs-identifier hs-var">otherwise</span></a></span><span>
</span><span id="line-578"></span><span>                </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">String -&gt; InstrBlock
forall a. String -&gt; a
</span><a href="GHC.Utils.Panic.Plain.html#panic"><span class="hs-identifier hs-var">panic</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;SPARC.CodeGen.GenCCall: no match&quot;</span></span><span>
</span><span id="line-579"></span><span>
</span><span id="line-580"></span><span>   </span><span class="hs-keyword">in</span><span>   </span><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681038464"><span class="hs-identifier hs-var">result</span></a></span><span>
</span><span id="line-581"></span><span>
</span><span id="line-582"></span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.html#assign_code"><span class="hs-identifier hs-var">assign_code</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><span class="hs-identifier">_</span></span><span> </span><span class="annot"><span class="annottext">[CmmFormal]
</span><span class="hs-identifier">_</span></span><span>
</span><span id="line-583"></span><span>        </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">String -&gt; InstrBlock
forall a. String -&gt; a
</span><a href="GHC.Utils.Panic.Plain.html#panic"><span class="hs-identifier hs-var">panic</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;SPARC.CodeGen.GenCCall: no match&quot;</span></span><span>
</span><span id="line-584"></span><span>
</span><span id="line-585"></span><span>
</span><span id="line-586"></span><span>
</span><span id="line-587"></span><span class="hs-comment">-- | Generate a call to implement an out-of-line floating point operation</span><span>
</span><span id="line-588"></span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.html#outOfLineMachOp"><span class="hs-identifier hs-type">outOfLineMachOp</span></a></span><span>
</span><span id="line-589"></span><span>        </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Cmm.MachOp.html#CallishMachOp"><span class="hs-identifier hs-type">CallishMachOp</span></a></span><span>
</span><span id="line-590"></span><span>        </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.Monad.html#NatM"><span class="hs-identifier hs-type">NatM</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="../../base/src/Data.Either.html#Either"><span class="hs-identifier hs-type">Either</span></a></span><span> </span><span class="annot"><a href="GHC.Cmm.CLabel.html#CLabel"><span class="hs-identifier hs-type">CLabel</span></a></span><span> </span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmExpr"><span class="hs-identifier hs-type">CmmExpr</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-591"></span><span>
</span><span id="line-592"></span><span id="outOfLineMachOp"><span class="annot"><span class="annottext">outOfLineMachOp :: CallishMachOp -&gt; NatM (Either CLabel CmmExpr)
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.html#outOfLineMachOp"><span class="hs-identifier hs-var hs-var">outOfLineMachOp</span></a></span></span><span> </span><span id="local-6989586621681038455"><span class="annot"><span class="annottext">CallishMachOp
</span><a href="#local-6989586621681038455"><span class="hs-identifier hs-var">mop</span></a></span></span><span>
</span><span id="line-593"></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>   </span><span class="hs-keyword">let</span><span> </span><span id="local-6989586621681038454"><span class="annot"><span class="annottext">functionName :: FastString
</span><a href="#local-6989586621681038454"><span class="hs-identifier hs-var hs-var">functionName</span></a></span></span><span>
</span><span id="line-594"></span><span>                </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">CallishMachOp -&gt; FastString
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.html#outOfLineMachOp_table"><span class="hs-identifier hs-var">outOfLineMachOp_table</span></a></span><span> </span><span class="annot"><span class="annottext">CallishMachOp
</span><a href="#local-6989586621681038455"><span class="hs-identifier hs-var">mop</span></a></span><span>
</span><span id="line-595"></span><span>
</span><span id="line-596"></span><span>        </span><span id="local-6989586621681038452"><span class="annot"><span class="annottext">NCGConfig
</span><a href="#local-6989586621681038452"><span class="hs-identifier hs-var">config</span></a></span></span><span>  </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">NatM NCGConfig
</span><a href="GHC.CmmToAsm.Monad.html#getConfig"><span class="hs-identifier hs-var">getConfig</span></a></span><span>
</span><span id="line-597"></span><span>        </span><span id="local-6989586621681038451"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681038451"><span class="hs-identifier hs-var">mopExpr</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">NCGConfig -&gt; ReferenceKind -&gt; CLabel -&gt; NatM CmmExpr
forall (m :: * -&gt; *).
CmmMakeDynamicReferenceM m =&gt;
NCGConfig -&gt; ReferenceKind -&gt; CLabel -&gt; m CmmExpr
</span><a href="GHC.CmmToAsm.PIC.html#cmmMakeDynamicReference"><span class="hs-identifier hs-var">cmmMakeDynamicReference</span></a></span><span> </span><span class="annot"><span class="annottext">NCGConfig
</span><a href="#local-6989586621681038452"><span class="hs-identifier hs-var">config</span></a></span><span> </span><span class="annot"><span class="annottext">ReferenceKind
</span><a href="GHC.CmmToAsm.PIC.html#CallReference"><span class="hs-identifier hs-var">CallReference</span></a></span><span>
</span><span id="line-598"></span><span>                </span><span class="annot"><span class="annottext">(CLabel -&gt; NatM CmmExpr) -&gt; CLabel -&gt; NatM CmmExpr
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span>  </span><span class="annot"><span class="annottext">FastString
-&gt; Maybe Int -&gt; ForeignLabelSource -&gt; FunctionOrData -&gt; CLabel
</span><a href="GHC.Cmm.CLabel.html#mkForeignLabel"><span class="hs-identifier hs-var">mkForeignLabel</span></a></span><span> </span><span class="annot"><span class="annottext">FastString
</span><a href="#local-6989586621681038454"><span class="hs-identifier hs-var">functionName</span></a></span><span> </span><span class="annot"><span class="annottext">Maybe Int
forall a. Maybe a
</span><a href="../../base/src/GHC.Maybe.html#Nothing"><span class="hs-identifier hs-var">Nothing</span></a></span><span> </span><span class="annot"><span class="annottext">ForeignLabelSource
</span><a href="GHC.Cmm.CLabel.html#ForeignLabelInExternalPackage"><span class="hs-identifier hs-var">ForeignLabelInExternalPackage</span></a></span><span> </span><span class="annot"><span class="annottext">FunctionOrData
</span><a href="GHC.Types.Basic.html#IsFunction"><span class="hs-identifier hs-var">IsFunction</span></a></span><span>
</span><span id="line-599"></span><span>
</span><span id="line-600"></span><span>        </span><span class="hs-keyword">let</span><span> </span><span id="local-6989586621681038445"><span class="annot"><span class="annottext">mopLabelOrExpr :: Either CLabel CmmExpr
</span><a href="#local-6989586621681038445"><span class="hs-identifier hs-var hs-var">mopLabelOrExpr</span></a></span></span><span>
</span><span id="line-601"></span><span>                </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">case</span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681038451"><span class="hs-identifier hs-var">mopExpr</span></a></span><span> </span><span class="hs-keyword">of</span><span>
</span><span id="line-602"></span><span>                        </span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmLit"><span class="hs-identifier hs-type">CmmLit</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmLabel"><span class="hs-identifier hs-type">CmmLabel</span></a></span><span> </span><span id="local-6989586621681038444"><span class="annot"><span class="annottext">CLabel
</span><a href="#local-6989586621681038444"><span class="hs-identifier hs-var">lbl</span></a></span></span><span class="hs-special">)</span><span>   </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">CLabel -&gt; Either CLabel CmmExpr
forall a b. a -&gt; Either a b
</span><a href="../../base/src/Data.Either.html#Left"><span class="hs-identifier hs-var">Left</span></a></span><span> </span><span class="annot"><span class="annottext">CLabel
</span><a href="#local-6989586621681038444"><span class="hs-identifier hs-var">lbl</span></a></span><span>
</span><span id="line-603"></span><span>                        </span><span class="annot"><span class="annottext">CmmExpr
</span><span class="hs-identifier">_</span></span><span>                       </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">CmmExpr -&gt; Either CLabel CmmExpr
forall a b. b -&gt; Either a b
</span><a href="../../base/src/Data.Either.html#Right"><span class="hs-identifier hs-var">Right</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681038451"><span class="hs-identifier hs-var">mopExpr</span></a></span><span>
</span><span id="line-604"></span><span>
</span><span id="line-605"></span><span>        </span><span class="annot"><span class="annottext">Either CLabel CmmExpr -&gt; NatM (Either CLabel CmmExpr)
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="annot"><span class="annottext">Either CLabel CmmExpr
</span><a href="#local-6989586621681038445"><span class="hs-identifier hs-var">mopLabelOrExpr</span></a></span><span>
</span><span id="line-606"></span><span>
</span><span id="line-607"></span><span>
</span><span id="line-608"></span><span class="hs-comment">-- | Decide what C function to use to implement a CallishMachOp</span><span>
</span><span id="line-609"></span><span class="hs-comment">--</span><span>
</span><span id="line-610"></span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.html#outOfLineMachOp_table"><span class="hs-identifier hs-type">outOfLineMachOp_table</span></a></span><span>
</span><span id="line-611"></span><span>        </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Cmm.MachOp.html#CallishMachOp"><span class="hs-identifier hs-type">CallishMachOp</span></a></span><span>
</span><span id="line-612"></span><span>        </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Data.FastString.html#FastString"><span class="hs-identifier hs-type">FastString</span></a></span><span>
</span><span id="line-613"></span><span>
</span><span id="line-614"></span><span id="outOfLineMachOp_table"><span class="annot"><span class="annottext">outOfLineMachOp_table :: CallishMachOp -&gt; FastString
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.html#outOfLineMachOp_table"><span class="hs-identifier hs-var hs-var">outOfLineMachOp_table</span></a></span></span><span> </span><span id="local-6989586621681038443"><span class="annot"><span class="annottext">CallishMachOp
</span><a href="#local-6989586621681038443"><span class="hs-identifier hs-var">mop</span></a></span></span><span>
</span><span id="line-615"></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">case</span><span> </span><span class="annot"><span class="annottext">CallishMachOp
</span><a href="#local-6989586621681038443"><span class="hs-identifier hs-var">mop</span></a></span><span> </span><span class="hs-keyword">of</span><span>
</span><span id="line-616"></span><span>        </span><span class="annot"><span class="annottext">CallishMachOp
</span><a href="GHC.Cmm.MachOp.html#MO_F32_Exp"><span class="hs-identifier hs-var">MO_F32_Exp</span></a></span><span>    </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">String -&gt; FastString
</span><a href="GHC.Data.FastString.html#fsLit"><span class="hs-identifier hs-var">fsLit</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;expf&quot;</span></span><span>
</span><span id="line-617"></span><span>        </span><span class="annot"><span class="annottext">CallishMachOp
</span><a href="GHC.Cmm.MachOp.html#MO_F32_ExpM1"><span class="hs-identifier hs-var">MO_F32_ExpM1</span></a></span><span>  </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">String -&gt; FastString
</span><a href="GHC.Data.FastString.html#fsLit"><span class="hs-identifier hs-var">fsLit</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;expm1f&quot;</span></span><span>
</span><span id="line-618"></span><span>        </span><span class="annot"><span class="annottext">CallishMachOp
</span><a href="GHC.Cmm.MachOp.html#MO_F32_Log"><span class="hs-identifier hs-var">MO_F32_Log</span></a></span><span>    </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">String -&gt; FastString
</span><a href="GHC.Data.FastString.html#fsLit"><span class="hs-identifier hs-var">fsLit</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;logf&quot;</span></span><span>
</span><span id="line-619"></span><span>        </span><span class="annot"><span class="annottext">CallishMachOp
</span><a href="GHC.Cmm.MachOp.html#MO_F32_Log1P"><span class="hs-identifier hs-var">MO_F32_Log1P</span></a></span><span>  </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">String -&gt; FastString
</span><a href="GHC.Data.FastString.html#fsLit"><span class="hs-identifier hs-var">fsLit</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;log1pf&quot;</span></span><span>
</span><span id="line-620"></span><span>        </span><span class="annot"><span class="annottext">CallishMachOp
</span><a href="GHC.Cmm.MachOp.html#MO_F32_Sqrt"><span class="hs-identifier hs-var">MO_F32_Sqrt</span></a></span><span>   </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">String -&gt; FastString
</span><a href="GHC.Data.FastString.html#fsLit"><span class="hs-identifier hs-var">fsLit</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;sqrtf&quot;</span></span><span>
</span><span id="line-621"></span><span>        </span><span class="annot"><span class="annottext">CallishMachOp
</span><a href="GHC.Cmm.MachOp.html#MO_F32_Fabs"><span class="hs-identifier hs-var">MO_F32_Fabs</span></a></span><span>   </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">FastString
</span><a href="#local-6989586621681038435"><span class="hs-identifier hs-var">unsupported</span></a></span><span>
</span><span id="line-622"></span><span>        </span><span class="annot"><span class="annottext">CallishMachOp
</span><a href="GHC.Cmm.MachOp.html#MO_F32_Pwr"><span class="hs-identifier hs-var">MO_F32_Pwr</span></a></span><span>    </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">String -&gt; FastString
</span><a href="GHC.Data.FastString.html#fsLit"><span class="hs-identifier hs-var">fsLit</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;powf&quot;</span></span><span>
</span><span id="line-623"></span><span>
</span><span id="line-624"></span><span>        </span><span class="annot"><span class="annottext">CallishMachOp
</span><a href="GHC.Cmm.MachOp.html#MO_F32_Sin"><span class="hs-identifier hs-var">MO_F32_Sin</span></a></span><span>    </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">String -&gt; FastString
</span><a href="GHC.Data.FastString.html#fsLit"><span class="hs-identifier hs-var">fsLit</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;sinf&quot;</span></span><span>
</span><span id="line-625"></span><span>        </span><span class="annot"><span class="annottext">CallishMachOp
</span><a href="GHC.Cmm.MachOp.html#MO_F32_Cos"><span class="hs-identifier hs-var">MO_F32_Cos</span></a></span><span>    </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">String -&gt; FastString
</span><a href="GHC.Data.FastString.html#fsLit"><span class="hs-identifier hs-var">fsLit</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;cosf&quot;</span></span><span>
</span><span id="line-626"></span><span>        </span><span class="annot"><span class="annottext">CallishMachOp
</span><a href="GHC.Cmm.MachOp.html#MO_F32_Tan"><span class="hs-identifier hs-var">MO_F32_Tan</span></a></span><span>    </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">String -&gt; FastString
</span><a href="GHC.Data.FastString.html#fsLit"><span class="hs-identifier hs-var">fsLit</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;tanf&quot;</span></span><span>
</span><span id="line-627"></span><span>
</span><span id="line-628"></span><span>        </span><span class="annot"><span class="annottext">CallishMachOp
</span><a href="GHC.Cmm.MachOp.html#MO_F32_Asin"><span class="hs-identifier hs-var">MO_F32_Asin</span></a></span><span>   </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">String -&gt; FastString
</span><a href="GHC.Data.FastString.html#fsLit"><span class="hs-identifier hs-var">fsLit</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;asinf&quot;</span></span><span>
</span><span id="line-629"></span><span>        </span><span class="annot"><span class="annottext">CallishMachOp
</span><a href="GHC.Cmm.MachOp.html#MO_F32_Acos"><span class="hs-identifier hs-var">MO_F32_Acos</span></a></span><span>   </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">String -&gt; FastString
</span><a href="GHC.Data.FastString.html#fsLit"><span class="hs-identifier hs-var">fsLit</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;acosf&quot;</span></span><span>
</span><span id="line-630"></span><span>        </span><span class="annot"><span class="annottext">CallishMachOp
</span><a href="GHC.Cmm.MachOp.html#MO_F32_Atan"><span class="hs-identifier hs-var">MO_F32_Atan</span></a></span><span>   </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">String -&gt; FastString
</span><a href="GHC.Data.FastString.html#fsLit"><span class="hs-identifier hs-var">fsLit</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;atanf&quot;</span></span><span>
</span><span id="line-631"></span><span>
</span><span id="line-632"></span><span>        </span><span class="annot"><span class="annottext">CallishMachOp
</span><a href="GHC.Cmm.MachOp.html#MO_F32_Sinh"><span class="hs-identifier hs-var">MO_F32_Sinh</span></a></span><span>   </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">String -&gt; FastString
</span><a href="GHC.Data.FastString.html#fsLit"><span class="hs-identifier hs-var">fsLit</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;sinhf&quot;</span></span><span>
</span><span id="line-633"></span><span>        </span><span class="annot"><span class="annottext">CallishMachOp
</span><a href="GHC.Cmm.MachOp.html#MO_F32_Cosh"><span class="hs-identifier hs-var">MO_F32_Cosh</span></a></span><span>   </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">String -&gt; FastString
</span><a href="GHC.Data.FastString.html#fsLit"><span class="hs-identifier hs-var">fsLit</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;coshf&quot;</span></span><span>
</span><span id="line-634"></span><span>        </span><span class="annot"><span class="annottext">CallishMachOp
</span><a href="GHC.Cmm.MachOp.html#MO_F32_Tanh"><span class="hs-identifier hs-var">MO_F32_Tanh</span></a></span><span>   </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">String -&gt; FastString
</span><a href="GHC.Data.FastString.html#fsLit"><span class="hs-identifier hs-var">fsLit</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;tanhf&quot;</span></span><span>
</span><span id="line-635"></span><span>
</span><span id="line-636"></span><span>        </span><span class="annot"><span class="annottext">CallishMachOp
</span><a href="GHC.Cmm.MachOp.html#MO_F32_Asinh"><span class="hs-identifier hs-var">MO_F32_Asinh</span></a></span><span>  </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">String -&gt; FastString
</span><a href="GHC.Data.FastString.html#fsLit"><span class="hs-identifier hs-var">fsLit</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;asinhf&quot;</span></span><span>
</span><span id="line-637"></span><span>        </span><span class="annot"><span class="annottext">CallishMachOp
</span><a href="GHC.Cmm.MachOp.html#MO_F32_Acosh"><span class="hs-identifier hs-var">MO_F32_Acosh</span></a></span><span>  </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">String -&gt; FastString
</span><a href="GHC.Data.FastString.html#fsLit"><span class="hs-identifier hs-var">fsLit</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;acoshf&quot;</span></span><span>
</span><span id="line-638"></span><span>        </span><span class="annot"><span class="annottext">CallishMachOp
</span><a href="GHC.Cmm.MachOp.html#MO_F32_Atanh"><span class="hs-identifier hs-var">MO_F32_Atanh</span></a></span><span>  </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">String -&gt; FastString
</span><a href="GHC.Data.FastString.html#fsLit"><span class="hs-identifier hs-var">fsLit</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;atanhf&quot;</span></span><span>
</span><span id="line-639"></span><span>
</span><span id="line-640"></span><span>        </span><span class="annot"><span class="annottext">CallishMachOp
</span><a href="GHC.Cmm.MachOp.html#MO_F64_Exp"><span class="hs-identifier hs-var">MO_F64_Exp</span></a></span><span>    </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">String -&gt; FastString
</span><a href="GHC.Data.FastString.html#fsLit"><span class="hs-identifier hs-var">fsLit</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;exp&quot;</span></span><span>
</span><span id="line-641"></span><span>        </span><span class="annot"><span class="annottext">CallishMachOp
</span><a href="GHC.Cmm.MachOp.html#MO_F64_ExpM1"><span class="hs-identifier hs-var">MO_F64_ExpM1</span></a></span><span>  </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">String -&gt; FastString
</span><a href="GHC.Data.FastString.html#fsLit"><span class="hs-identifier hs-var">fsLit</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;expm1&quot;</span></span><span>
</span><span id="line-642"></span><span>        </span><span class="annot"><span class="annottext">CallishMachOp
</span><a href="GHC.Cmm.MachOp.html#MO_F64_Log"><span class="hs-identifier hs-var">MO_F64_Log</span></a></span><span>    </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">String -&gt; FastString
</span><a href="GHC.Data.FastString.html#fsLit"><span class="hs-identifier hs-var">fsLit</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;log&quot;</span></span><span>
</span><span id="line-643"></span><span>        </span><span class="annot"><span class="annottext">CallishMachOp
</span><a href="GHC.Cmm.MachOp.html#MO_F64_Log1P"><span class="hs-identifier hs-var">MO_F64_Log1P</span></a></span><span>  </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">String -&gt; FastString
</span><a href="GHC.Data.FastString.html#fsLit"><span class="hs-identifier hs-var">fsLit</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;log1p&quot;</span></span><span>
</span><span id="line-644"></span><span>        </span><span class="annot"><span class="annottext">CallishMachOp
</span><a href="GHC.Cmm.MachOp.html#MO_F64_Sqrt"><span class="hs-identifier hs-var">MO_F64_Sqrt</span></a></span><span>   </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">String -&gt; FastString
</span><a href="GHC.Data.FastString.html#fsLit"><span class="hs-identifier hs-var">fsLit</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;sqrt&quot;</span></span><span>
</span><span id="line-645"></span><span>        </span><span class="annot"><span class="annottext">CallishMachOp
</span><a href="GHC.Cmm.MachOp.html#MO_F64_Fabs"><span class="hs-identifier hs-var">MO_F64_Fabs</span></a></span><span>   </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">FastString
</span><a href="#local-6989586621681038435"><span class="hs-identifier hs-var">unsupported</span></a></span><span>
</span><span id="line-646"></span><span>        </span><span class="annot"><span class="annottext">CallishMachOp
</span><a href="GHC.Cmm.MachOp.html#MO_F64_Pwr"><span class="hs-identifier hs-var">MO_F64_Pwr</span></a></span><span>    </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">String -&gt; FastString
</span><a href="GHC.Data.FastString.html#fsLit"><span class="hs-identifier hs-var">fsLit</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;pow&quot;</span></span><span>
</span><span id="line-647"></span><span>
</span><span id="line-648"></span><span>        </span><span class="annot"><span class="annottext">CallishMachOp
</span><a href="GHC.Cmm.MachOp.html#MO_F64_Sin"><span class="hs-identifier hs-var">MO_F64_Sin</span></a></span><span>    </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">String -&gt; FastString
</span><a href="GHC.Data.FastString.html#fsLit"><span class="hs-identifier hs-var">fsLit</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;sin&quot;</span></span><span>
</span><span id="line-649"></span><span>        </span><span class="annot"><span class="annottext">CallishMachOp
</span><a href="GHC.Cmm.MachOp.html#MO_F64_Cos"><span class="hs-identifier hs-var">MO_F64_Cos</span></a></span><span>    </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">String -&gt; FastString
</span><a href="GHC.Data.FastString.html#fsLit"><span class="hs-identifier hs-var">fsLit</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;cos&quot;</span></span><span>
</span><span id="line-650"></span><span>        </span><span class="annot"><span class="annottext">CallishMachOp
</span><a href="GHC.Cmm.MachOp.html#MO_F64_Tan"><span class="hs-identifier hs-var">MO_F64_Tan</span></a></span><span>    </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">String -&gt; FastString
</span><a href="GHC.Data.FastString.html#fsLit"><span class="hs-identifier hs-var">fsLit</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;tan&quot;</span></span><span>
</span><span id="line-651"></span><span>
</span><span id="line-652"></span><span>        </span><span class="annot"><span class="annottext">CallishMachOp
</span><a href="GHC.Cmm.MachOp.html#MO_F64_Asin"><span class="hs-identifier hs-var">MO_F64_Asin</span></a></span><span>   </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">String -&gt; FastString
</span><a href="GHC.Data.FastString.html#fsLit"><span class="hs-identifier hs-var">fsLit</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;asin&quot;</span></span><span>
</span><span id="line-653"></span><span>        </span><span class="annot"><span class="annottext">CallishMachOp
</span><a href="GHC.Cmm.MachOp.html#MO_F64_Acos"><span class="hs-identifier hs-var">MO_F64_Acos</span></a></span><span>   </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">String -&gt; FastString
</span><a href="GHC.Data.FastString.html#fsLit"><span class="hs-identifier hs-var">fsLit</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;acos&quot;</span></span><span>
</span><span id="line-654"></span><span>        </span><span class="annot"><span class="annottext">CallishMachOp
</span><a href="GHC.Cmm.MachOp.html#MO_F64_Atan"><span class="hs-identifier hs-var">MO_F64_Atan</span></a></span><span>   </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">String -&gt; FastString
</span><a href="GHC.Data.FastString.html#fsLit"><span class="hs-identifier hs-var">fsLit</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;atan&quot;</span></span><span>
</span><span id="line-655"></span><span>
</span><span id="line-656"></span><span>        </span><span class="annot"><span class="annottext">CallishMachOp
</span><a href="GHC.Cmm.MachOp.html#MO_F64_Sinh"><span class="hs-identifier hs-var">MO_F64_Sinh</span></a></span><span>   </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">String -&gt; FastString
</span><a href="GHC.Data.FastString.html#fsLit"><span class="hs-identifier hs-var">fsLit</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;sinh&quot;</span></span><span>
</span><span id="line-657"></span><span>        </span><span class="annot"><span class="annottext">CallishMachOp
</span><a href="GHC.Cmm.MachOp.html#MO_F64_Cosh"><span class="hs-identifier hs-var">MO_F64_Cosh</span></a></span><span>   </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">String -&gt; FastString
</span><a href="GHC.Data.FastString.html#fsLit"><span class="hs-identifier hs-var">fsLit</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;cosh&quot;</span></span><span>
</span><span id="line-658"></span><span>        </span><span class="annot"><span class="annottext">CallishMachOp
</span><a href="GHC.Cmm.MachOp.html#MO_F64_Tanh"><span class="hs-identifier hs-var">MO_F64_Tanh</span></a></span><span>   </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">String -&gt; FastString
</span><a href="GHC.Data.FastString.html#fsLit"><span class="hs-identifier hs-var">fsLit</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;tanh&quot;</span></span><span>
</span><span id="line-659"></span><span>
</span><span id="line-660"></span><span>        </span><span class="annot"><span class="annottext">CallishMachOp
</span><a href="GHC.Cmm.MachOp.html#MO_F64_Asinh"><span class="hs-identifier hs-var">MO_F64_Asinh</span></a></span><span>  </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">String -&gt; FastString
</span><a href="GHC.Data.FastString.html#fsLit"><span class="hs-identifier hs-var">fsLit</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;asinh&quot;</span></span><span>
</span><span id="line-661"></span><span>        </span><span class="annot"><span class="annottext">CallishMachOp
</span><a href="GHC.Cmm.MachOp.html#MO_F64_Acosh"><span class="hs-identifier hs-var">MO_F64_Acosh</span></a></span><span>  </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">String -&gt; FastString
</span><a href="GHC.Data.FastString.html#fsLit"><span class="hs-identifier hs-var">fsLit</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;acosh&quot;</span></span><span>
</span><span id="line-662"></span><span>        </span><span class="annot"><span class="annottext">CallishMachOp
</span><a href="GHC.Cmm.MachOp.html#MO_F64_Atanh"><span class="hs-identifier hs-var">MO_F64_Atanh</span></a></span><span>  </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">String -&gt; FastString
</span><a href="GHC.Data.FastString.html#fsLit"><span class="hs-identifier hs-var">fsLit</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;atanh&quot;</span></span><span>
</span><span id="line-663"></span><span>
</span><span id="line-664"></span><span>        </span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_UF_Conv"><span class="hs-identifier hs-type">MO_UF_Conv</span></a></span><span> </span><span id="local-6989586621681038401"><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681038401"><span class="hs-identifier hs-var">w</span></a></span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">String -&gt; FastString
</span><a href="GHC.Data.FastString.html#fsLit"><span class="hs-identifier hs-var">fsLit</span></a></span><span> </span><span class="annot"><span class="annottext">(String -&gt; FastString) -&gt; String -&gt; FastString
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">Width -&gt; String
</span><a href="GHC.CmmToAsm.CPrim.html#word2FloatLabel"><span class="hs-identifier hs-var">word2FloatLabel</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681038401"><span class="hs-identifier hs-var">w</span></a></span><span>
</span><span id="line-665"></span><span>
</span><span id="line-666"></span><span>        </span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_Memcpy"><span class="hs-identifier hs-type">MO_Memcpy</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-identifier">_</span></span><span>  </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">String -&gt; FastString
</span><a href="GHC.Data.FastString.html#fsLit"><span class="hs-identifier hs-var">fsLit</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;memcpy&quot;</span></span><span>
</span><span id="line-667"></span><span>        </span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_Memset"><span class="hs-identifier hs-type">MO_Memset</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-identifier">_</span></span><span>  </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">String -&gt; FastString
</span><a href="GHC.Data.FastString.html#fsLit"><span class="hs-identifier hs-var">fsLit</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;memset&quot;</span></span><span>
</span><span id="line-668"></span><span>        </span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_Memmove"><span class="hs-identifier hs-type">MO_Memmove</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-identifier">_</span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">String -&gt; FastString
</span><a href="GHC.Data.FastString.html#fsLit"><span class="hs-identifier hs-var">fsLit</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;memmove&quot;</span></span><span>
</span><span id="line-669"></span><span>        </span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_Memcmp"><span class="hs-identifier hs-type">MO_Memcmp</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-identifier">_</span></span><span>  </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">String -&gt; FastString
</span><a href="GHC.Data.FastString.html#fsLit"><span class="hs-identifier hs-var">fsLit</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;memcmp&quot;</span></span><span>
</span><span id="line-670"></span><span>
</span><span id="line-671"></span><span>        </span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_BSwap"><span class="hs-identifier hs-type">MO_BSwap</span></a></span><span> </span><span id="local-6989586621681038394"><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681038394"><span class="hs-identifier hs-var">w</span></a></span></span><span>   </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">String -&gt; FastString
</span><a href="GHC.Data.FastString.html#fsLit"><span class="hs-identifier hs-var">fsLit</span></a></span><span> </span><span class="annot"><span class="annottext">(String -&gt; FastString) -&gt; String -&gt; FastString
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">Width -&gt; String
</span><a href="GHC.CmmToAsm.CPrim.html#bSwapLabel"><span class="hs-identifier hs-var">bSwapLabel</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681038394"><span class="hs-identifier hs-var">w</span></a></span><span>
</span><span id="line-672"></span><span>        </span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_BRev"><span class="hs-identifier hs-type">MO_BRev</span></a></span><span> </span><span id="local-6989586621681038391"><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681038391"><span class="hs-identifier hs-var">w</span></a></span></span><span>    </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">String -&gt; FastString
</span><a href="GHC.Data.FastString.html#fsLit"><span class="hs-identifier hs-var">fsLit</span></a></span><span> </span><span class="annot"><span class="annottext">(String -&gt; FastString) -&gt; String -&gt; FastString
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">Width -&gt; String
</span><a href="GHC.CmmToAsm.CPrim.html#bRevLabel"><span class="hs-identifier hs-var">bRevLabel</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681038391"><span class="hs-identifier hs-var">w</span></a></span><span>
</span><span id="line-673"></span><span>        </span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_PopCnt"><span class="hs-identifier hs-type">MO_PopCnt</span></a></span><span> </span><span id="local-6989586621681038388"><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681038388"><span class="hs-identifier hs-var">w</span></a></span></span><span>  </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">String -&gt; FastString
</span><a href="GHC.Data.FastString.html#fsLit"><span class="hs-identifier hs-var">fsLit</span></a></span><span> </span><span class="annot"><span class="annottext">(String -&gt; FastString) -&gt; String -&gt; FastString
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">Width -&gt; String
</span><a href="GHC.CmmToAsm.CPrim.html#popCntLabel"><span class="hs-identifier hs-var">popCntLabel</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681038388"><span class="hs-identifier hs-var">w</span></a></span><span>
</span><span id="line-674"></span><span>        </span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_Pdep"><span class="hs-identifier hs-type">MO_Pdep</span></a></span><span> </span><span id="local-6989586621681038385"><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681038385"><span class="hs-identifier hs-var">w</span></a></span></span><span>    </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">String -&gt; FastString
</span><a href="GHC.Data.FastString.html#fsLit"><span class="hs-identifier hs-var">fsLit</span></a></span><span> </span><span class="annot"><span class="annottext">(String -&gt; FastString) -&gt; String -&gt; FastString
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">Width -&gt; String
</span><a href="GHC.CmmToAsm.CPrim.html#pdepLabel"><span class="hs-identifier hs-var">pdepLabel</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681038385"><span class="hs-identifier hs-var">w</span></a></span><span>
</span><span id="line-675"></span><span>        </span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_Pext"><span class="hs-identifier hs-type">MO_Pext</span></a></span><span> </span><span id="local-6989586621681038382"><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681038382"><span class="hs-identifier hs-var">w</span></a></span></span><span>    </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">String -&gt; FastString
</span><a href="GHC.Data.FastString.html#fsLit"><span class="hs-identifier hs-var">fsLit</span></a></span><span> </span><span class="annot"><span class="annottext">(String -&gt; FastString) -&gt; String -&gt; FastString
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">Width -&gt; String
</span><a href="GHC.CmmToAsm.CPrim.html#pextLabel"><span class="hs-identifier hs-var">pextLabel</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681038382"><span class="hs-identifier hs-var">w</span></a></span><span>
</span><span id="line-676"></span><span>        </span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_Clz"><span class="hs-identifier hs-type">MO_Clz</span></a></span><span> </span><span id="local-6989586621681038379"><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681038379"><span class="hs-identifier hs-var">w</span></a></span></span><span>     </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">String -&gt; FastString
</span><a href="GHC.Data.FastString.html#fsLit"><span class="hs-identifier hs-var">fsLit</span></a></span><span> </span><span class="annot"><span class="annottext">(String -&gt; FastString) -&gt; String -&gt; FastString
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">Width -&gt; String
</span><a href="GHC.CmmToAsm.CPrim.html#clzLabel"><span class="hs-identifier hs-var">clzLabel</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681038379"><span class="hs-identifier hs-var">w</span></a></span><span>
</span><span id="line-677"></span><span>        </span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_Ctz"><span class="hs-identifier hs-type">MO_Ctz</span></a></span><span> </span><span id="local-6989586621681038376"><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681038376"><span class="hs-identifier hs-var">w</span></a></span></span><span>     </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">String -&gt; FastString
</span><a href="GHC.Data.FastString.html#fsLit"><span class="hs-identifier hs-var">fsLit</span></a></span><span> </span><span class="annot"><span class="annottext">(String -&gt; FastString) -&gt; String -&gt; FastString
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">Width -&gt; String
</span><a href="GHC.CmmToAsm.CPrim.html#ctzLabel"><span class="hs-identifier hs-var">ctzLabel</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681038376"><span class="hs-identifier hs-var">w</span></a></span><span>
</span><span id="line-678"></span><span>        </span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_AtomicRMW"><span class="hs-identifier hs-type">MO_AtomicRMW</span></a></span><span> </span><span id="local-6989586621681038373"><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681038373"><span class="hs-identifier hs-var">w</span></a></span></span><span> </span><span id="local-6989586621681038372"><span class="annot"><span class="annottext">AtomicMachOp
</span><a href="#local-6989586621681038372"><span class="hs-identifier hs-var">amop</span></a></span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">String -&gt; FastString
</span><a href="GHC.Data.FastString.html#fsLit"><span class="hs-identifier hs-var">fsLit</span></a></span><span> </span><span class="annot"><span class="annottext">(String -&gt; FastString) -&gt; String -&gt; FastString
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">Width -&gt; AtomicMachOp -&gt; String
</span><a href="GHC.CmmToAsm.CPrim.html#atomicRMWLabel"><span class="hs-identifier hs-var">atomicRMWLabel</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681038373"><span class="hs-identifier hs-var">w</span></a></span><span> </span><span class="annot"><span class="annottext">AtomicMachOp
</span><a href="#local-6989586621681038372"><span class="hs-identifier hs-var">amop</span></a></span><span>
</span><span id="line-679"></span><span>        </span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_Cmpxchg"><span class="hs-identifier hs-type">MO_Cmpxchg</span></a></span><span> </span><span id="local-6989586621681038369"><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681038369"><span class="hs-identifier hs-var">w</span></a></span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">String -&gt; FastString
</span><a href="GHC.Data.FastString.html#fsLit"><span class="hs-identifier hs-var">fsLit</span></a></span><span> </span><span class="annot"><span class="annottext">(String -&gt; FastString) -&gt; String -&gt; FastString
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">Width -&gt; String
</span><a href="GHC.CmmToAsm.CPrim.html#cmpxchgLabel"><span class="hs-identifier hs-var">cmpxchgLabel</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681038369"><span class="hs-identifier hs-var">w</span></a></span><span>
</span><span id="line-680"></span><span>        </span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_Xchg"><span class="hs-identifier hs-type">MO_Xchg</span></a></span><span> </span><span id="local-6989586621681038366"><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681038366"><span class="hs-identifier hs-var">w</span></a></span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">String -&gt; FastString
</span><a href="GHC.Data.FastString.html#fsLit"><span class="hs-identifier hs-var">fsLit</span></a></span><span> </span><span class="annot"><span class="annottext">(String -&gt; FastString) -&gt; String -&gt; FastString
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">Width -&gt; String
</span><a href="GHC.CmmToAsm.CPrim.html#xchgLabel"><span class="hs-identifier hs-var">xchgLabel</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681038366"><span class="hs-identifier hs-var">w</span></a></span><span>
</span><span id="line-681"></span><span>        </span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_AtomicRead"><span class="hs-identifier hs-type">MO_AtomicRead</span></a></span><span> </span><span id="local-6989586621681038363"><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681038363"><span class="hs-identifier hs-var">w</span></a></span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">String -&gt; FastString
</span><a href="GHC.Data.FastString.html#fsLit"><span class="hs-identifier hs-var">fsLit</span></a></span><span> </span><span class="annot"><span class="annottext">(String -&gt; FastString) -&gt; String -&gt; FastString
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">Width -&gt; String
</span><a href="GHC.CmmToAsm.CPrim.html#atomicReadLabel"><span class="hs-identifier hs-var">atomicReadLabel</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681038363"><span class="hs-identifier hs-var">w</span></a></span><span>
</span><span id="line-682"></span><span>        </span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_AtomicWrite"><span class="hs-identifier hs-type">MO_AtomicWrite</span></a></span><span> </span><span id="local-6989586621681038360"><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681038360"><span class="hs-identifier hs-var">w</span></a></span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">String -&gt; FastString
</span><a href="GHC.Data.FastString.html#fsLit"><span class="hs-identifier hs-var">fsLit</span></a></span><span> </span><span class="annot"><span class="annottext">(String -&gt; FastString) -&gt; String -&gt; FastString
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">Width -&gt; String
</span><a href="GHC.CmmToAsm.CPrim.html#atomicWriteLabel"><span class="hs-identifier hs-var">atomicWriteLabel</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681038360"><span class="hs-identifier hs-var">w</span></a></span><span>
</span><span id="line-683"></span><span>
</span><span id="line-684"></span><span>        </span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_S_Mul2"><span class="hs-identifier hs-type">MO_S_Mul2</span></a></span><span>    </span><span class="hs-special">{</span><span class="hs-special">}</span><span>  </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">FastString
</span><a href="#local-6989586621681038435"><span class="hs-identifier hs-var">unsupported</span></a></span><span>
</span><span id="line-685"></span><span>        </span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_S_QuotRem"><span class="hs-identifier hs-type">MO_S_QuotRem</span></a></span><span> </span><span class="hs-special">{</span><span class="hs-special">}</span><span>  </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">FastString
</span><a href="#local-6989586621681038435"><span class="hs-identifier hs-var">unsupported</span></a></span><span>
</span><span id="line-686"></span><span>        </span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_U_QuotRem"><span class="hs-identifier hs-type">MO_U_QuotRem</span></a></span><span> </span><span class="hs-special">{</span><span class="hs-special">}</span><span>  </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">FastString
</span><a href="#local-6989586621681038435"><span class="hs-identifier hs-var">unsupported</span></a></span><span>
</span><span id="line-687"></span><span>        </span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_U_QuotRem2"><span class="hs-identifier hs-type">MO_U_QuotRem2</span></a></span><span> </span><span class="hs-special">{</span><span class="hs-special">}</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">FastString
</span><a href="#local-6989586621681038435"><span class="hs-identifier hs-var">unsupported</span></a></span><span>
</span><span id="line-688"></span><span>        </span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_Add2"><span class="hs-identifier hs-type">MO_Add2</span></a></span><span> </span><span class="hs-special">{</span><span class="hs-special">}</span><span>       </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">FastString
</span><a href="#local-6989586621681038435"><span class="hs-identifier hs-var">unsupported</span></a></span><span>
</span><span id="line-689"></span><span>        </span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_AddWordC"><span class="hs-identifier hs-type">MO_AddWordC</span></a></span><span> </span><span class="hs-special">{</span><span class="hs-special">}</span><span>   </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">FastString
</span><a href="#local-6989586621681038435"><span class="hs-identifier hs-var">unsupported</span></a></span><span>
</span><span id="line-690"></span><span>        </span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_SubWordC"><span class="hs-identifier hs-type">MO_SubWordC</span></a></span><span> </span><span class="hs-special">{</span><span class="hs-special">}</span><span>   </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">FastString
</span><a href="#local-6989586621681038435"><span class="hs-identifier hs-var">unsupported</span></a></span><span>
</span><span id="line-691"></span><span>        </span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_AddIntC"><span class="hs-identifier hs-type">MO_AddIntC</span></a></span><span> </span><span class="hs-special">{</span><span class="hs-special">}</span><span>    </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">FastString
</span><a href="#local-6989586621681038435"><span class="hs-identifier hs-var">unsupported</span></a></span><span>
</span><span id="line-692"></span><span>        </span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_SubIntC"><span class="hs-identifier hs-type">MO_SubIntC</span></a></span><span> </span><span class="hs-special">{</span><span class="hs-special">}</span><span>    </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">FastString
</span><a href="#local-6989586621681038435"><span class="hs-identifier hs-var">unsupported</span></a></span><span>
</span><span id="line-693"></span><span>        </span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_U_Mul2"><span class="hs-identifier hs-type">MO_U_Mul2</span></a></span><span> </span><span class="hs-special">{</span><span class="hs-special">}</span><span>     </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">FastString
</span><a href="#local-6989586621681038435"><span class="hs-identifier hs-var">unsupported</span></a></span><span>
</span><span id="line-694"></span><span>        </span><span class="annot"><span class="annottext">CallishMachOp
</span><a href="GHC.Cmm.MachOp.html#MO_ReadBarrier"><span class="hs-identifier hs-var">MO_ReadBarrier</span></a></span><span>   </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">FastString
</span><a href="#local-6989586621681038435"><span class="hs-identifier hs-var">unsupported</span></a></span><span>
</span><span id="line-695"></span><span>        </span><span class="annot"><span class="annottext">CallishMachOp
</span><a href="GHC.Cmm.MachOp.html#MO_WriteBarrier"><span class="hs-identifier hs-var">MO_WriteBarrier</span></a></span><span>  </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">FastString
</span><a href="#local-6989586621681038435"><span class="hs-identifier hs-var">unsupported</span></a></span><span>
</span><span id="line-696"></span><span>        </span><span class="annot"><span class="annottext">CallishMachOp
</span><a href="GHC.Cmm.MachOp.html#MO_Touch"><span class="hs-identifier hs-var">MO_Touch</span></a></span><span>         </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">FastString
</span><a href="#local-6989586621681038435"><span class="hs-identifier hs-var">unsupported</span></a></span><span>
</span><span id="line-697"></span><span>        </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_Prefetch_Data"><span class="hs-identifier hs-type">MO_Prefetch_Data</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-identifier">_</span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">FastString
</span><a href="#local-6989586621681038435"><span class="hs-identifier hs-var">unsupported</span></a></span><span>
</span><span id="line-698"></span><span>    </span><span class="hs-keyword">where</span><span> </span><span id="local-6989586621681038435"><span class="annot"><span class="annottext">unsupported :: FastString
</span><a href="#local-6989586621681038435"><span class="hs-identifier hs-var hs-var">unsupported</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">String -&gt; FastString
forall a. String -&gt; a
</span><a href="GHC.Utils.Panic.Plain.html#panic"><span class="hs-identifier hs-var">panic</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;outOfLineCmmOp: &quot;</span></span><span> </span><span class="annot"><span class="annottext">String -&gt; String -&gt; String
forall a. [a] -&gt; [a] -&gt; [a]
</span><a href="../../base/src/GHC.Base.html#%2B%2B"><span class="hs-operator hs-var">++</span></a></span><span> </span><span class="annot"><span class="annottext">CallishMachOp -&gt; String
forall a. Show a =&gt; a -&gt; String
</span><a href="../../base/src/GHC.Show.html#show"><span class="hs-identifier hs-var">show</span></a></span><span> </span><span class="annot"><span class="annottext">CallishMachOp
</span><a href="#local-6989586621681038443"><span class="hs-identifier hs-var">mop</span></a></span><span>
</span><span id="line-699"></span><span>                            </span><span class="annot"><span class="annottext">String -&gt; String -&gt; String
forall a. [a] -&gt; [a] -&gt; [a]
</span><a href="../../base/src/GHC.Base.html#%2B%2B"><span class="hs-operator hs-var">++</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot; not supported here&quot;</span></span><span class="hs-special">)</span><span>
</span><span id="line-700"></span><span>
</span><span id="line-701"></span></pre></body></html>